创建模式(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. 解释器模式
创建抽象表达式,各种表达式均实现抽象表达式,解释器的各种方法使用不同的表达式来实现