设计模式

创建模式(5种)

1.工厂模式

<1>. 简单工厂模式

使用工厂类创建多种产品对象

使用方便,不符合开闭原则(修改了原来的代码)

<2>. 工厂模式

多个工厂类实现一个工厂接口,使用工厂类生产不同的产品

类越来越多

2. 抽象工厂模式

多个工厂类实现一个工厂接口,每种产品类实现一种产品的接口,使用工厂类生产不同的产品

使用方便,归类清晰

违反开闭原则

3. 单例模式

保证一个全局唯一的变量对象

4. 建造者模式

抽象类Builder,包含各种加工产品的抽象方法,实现类Builder实现后创建产品类,对产品类进行各种修饰后返回产品对象。Director创建或接收实现类Builder后,调用Builder的部分加工产品的方法后获取产品对象。

可以分离构建和表示,可以自选加工方法,加工顺序等等,符合开闭原则

适用于产品变化不大,产品相同点多的场景

5. 原型模式

新建产品类后,产品类实现克隆接口,使用新建的这个产品类浅克隆一个新对象,深克隆需要重写克隆接口的方法

结构模式(7种)

1. 适配器模式

服务端类通过适配器类兼容其他接口类,首先用新建一个抽象适配器类,使用服务端类调用抽象适配器类的方法,适配器类实现抽象适配器类的方法,继承其他接口类的方法并调用方法(类适配器)或新建其他接口的对象并调用方法(对象适配器)

适配器可以把不同的适配者适配到同一个目标

单继承不能适配多个类,抽象类是接口,具有局限性

2. 桥接模式

使用接口来分类一次品牌,使用抽象类分类一次物品,抽象类包括接口品牌,这样就可以将两种类型分离,在增加物品的同时,可以选择品牌

违背单一继承原则,复用性差,类的个数多,减少了子类,维护性强,符合开闭原则

增加了设计难度,抽象层设计难度大,使用局限大

3. 代理模式

静态代理

出售人实现接口的方法,代理人实现接口的方法,代理人调用代理的实现的接口方法,购买人通过代理人来调用出售人实现的接口方法,代理人可以拥有自己独立的方法

出售人的代码更加简单,各种业务交给了代理人类,方便集中扩展

每个出售人都对应一个代理人,代码量翻倍,开发效率会降低

动态代理

基于接口的动态代理,基于类的动态代理,通过加载类实现的接口方法来执行,在方法执行前后可以添加任意代码。一个动态代理代理了一个接口,实现该接口的类都可以代理

4. 装饰者模式

装饰者和被装饰者实现同一个抽象的超类,实现类继承双方的同时,装饰者实现类要可以对被装饰者实现类进行接收修改

可以很方便的对被装饰者进行各种修改

5. 外观模式

由一个管理类创建销毁其他的各种类,客户类只需要调用管理类即可使用其他类

解耦,易于扩展和维护,使用简单,层次清晰,隐藏了子系统的细节

6. 组合模式

树枝树叶实现同一个接口,客户类可以很方便的使用树枝和树叶实现类,无需关心他们两个的区别

简化了客户端代码,很容易的添加对象,符合开闭原则

设计复杂,不容易新增功能,不容易限制组件

7. 享元模式

创建类的抽象接口或抽象类来定义公共属性方法,实现类继承接口或抽象类,使用工厂类创建实现类的同时还可以保证实现类的唯一性

减少了对象的创建,节省了内存

提高了系统的复杂度

关系模式(11种)

第一类 父类与子类

1. 策略模式

让策略类实现策略的抽象类或接口类,客户类调用策略抽象类或接口类

可以很方便的选择使用各种算法

策略类会越来越多,所有策略类都需要对外暴露

2. 模板方法模式

模板类是接口或者抽象类,实现类继承或实现模板类

代码复用率高,符合开闭原则

不同实现会新增子类,导致类的个数增多

第二类 两个类之间

3. 观察者模式

定义观察者和被观察者接口,被观察者保存观察者的列表,在需要通知时遍历列表通知观察者

观察者与被观察者是抽象耦合的

观察者数量太多时会花费很多时间来通知,观察者与被观察者不能很好的互相调用,观察者不知道被观察者是如何变化的

4. 迭代器模式

创建抽象或接口容器类以及迭代器类,分别拥有对应的具体实现类,容器类用于将其他的数据创建成迭代器类,迭代器类拥有取出下一个元素,移除当前元素等迭代器类方法

简化了容器类,新增容器类和迭代器类都很简单

会导致类的数量增加

5. 责任链模式

创建抽象或接口处理人类,创建他们的实现类,高层处理人类中包含低层的处理人类,如果高层处理类处理完后或不处理,可以交付给低一级的处理类

通过哦这种方法,可以实现多层过滤

6. 命令模式

请求者类调用抽象命令类,具体命令类实现抽象命令类并调用执行者类,实现相应的功能

第三类 类的状态

7. 备忘录模式

创建抽象或接口备忘录类,由发起人创建设置备忘录实现类的各种属性,由管理者保存取出备忘录的对象

8. 状态模式

定义抽象或接口状态模式,创建多个状态模式的实现类,创建抽象或接口环境类以及其实现类,实现类包含多个状态模式实现类,根据需要设置不同的当前状态实现类,从而拥有不同的行动

第四类 通过中间类

9. 访问者模式

首先定义抽象访问者,指明要访问哪些元素类,然后实现抽象访问者,在访问元素类时做什么,写一个抽象或接口元素类,用具体实例实现元素类,元素类可以调用访问类的方法来实现访问

10. 中介者模式

创建接口或抽象中介者类以及同事类,同事类之间的相互交流使用中介者类

11. 解释器模式

创建抽象表达式,各种表达式均实现抽象表达式,解释器的各种方法使用不同的表达式来实现