# designdemo **Repository Path**: itpengwei/designdemo ## Basic Information - **Project Name**: designdemo - **Description**: 用java实现设计模式demo,以及学习文档 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2019-11-28 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # designdemo #### 介绍 用java实现设计模式demo,以及学习文档 ##### 该项目包含了所列举的设计模式 * [代码实现](https://gitee.com/itpengwei/designdemo/tree/master/src/main/java/com/itpengwei) ##### 原则 - 单一职责原则,就一个类而言,应该仅有一个引起它变化的原因 - 开放-封闭原则,软件实体(类、模块、函数等等)可以扩展,但是不可以修改 - 依赖倒转原则,高层模块不应该依赖低层模块,都应该依赖抽象。抽象不应该依赖细节,细节应该依赖抽象 - 里氏代换原则,子类必须能替换掉它们的父类型 - 迪米特法则,也叫最少知识原则,如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用 - 合成/聚合复用原则(CARP),尽量使用合成/聚合,尽量不要使用类继承 ##### 设计模式种类 1. [策略模式(Strategy)](https://gitee.com/itpengwei/designdemo/tree/master/src/main/java/com/itpengwei/strategy), 它定义了算法家族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化,不会影响到使用算法的客户。 策略模式的决定权在用户,系统本身提供不同算法的实现,新增或者删除算法,对各种算法做封装。因此,策略模式多用在算法决策系统中,外部用户只需要决定用哪个算法即可。 2. [简单工厂模式(simple factory)](https://gitee.com/itpengwei/designdemo/tree/master/src/main/java/com/itpengwei/simplefactory), 它是由一个工厂对象决定创建出哪一种产品类的实例,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。 3. [装饰模式(Decorator)](https://gitee.com/itpengwei/designdemo/tree/master/src/main/java/com/itpengwei/decorator), 装饰模式就是给一个对象添加一些新功能,而且是动态的,要求装饰对象与被装饰对象实现同一接口,装饰对象持有被装饰对象实例。 应用场景: 1,需要扩展一个类的功能。 2,动态的为一个对象增加功能,而且还可以动态撤销。(继承实现不了是因为继承是静态的,不能动态增删) 缺点:产生过多相似对象,有问题不容易查找。 3. [代理模式(Proxy)](https://gitee.com/itpengwei/designdemo/tree/master/src/main/java/com/itpengwei/proxy), 顾名思义,看这名字我们就能猜出该模式的作用。代理模式无非也就多了一个代理类 替目标对象完成一些操作。比如我们租房子,需要找中介,因为他们手上有房源,比 咱们懂得多,专业,代理其实就是这个意思,找专业的人做专业的事 代理模式的应用场景: 如果已有的方法在使用的时候需要对原有的方法进行改进,此时有两种办法: 1、修改原有的方法来适应。这样违反了“对扩展开放,对修改关闭”的原则。 2、就是采用一个代理类调用原有的方法,且对产生的结果进行控制。这种方法就是代理模式。 使用代理模式,可以将功能划分的更加清晰,有助于后期维护!