一 、创建型模式
1.1单例模式
设计原则:无
介绍:在整个应用中只有一个对象
1.2简单工厂
介绍:通过工厂类去创建产品,调用者不用直接去创建对象,并封装了对象的创建细节。
设计原则:遵循单一职责 、违背开闭原则(生成不同对象,需要实现不同的工厂类,扩展性不好)
1.3工厂方法模式
介绍:工厂方法模式又叫虚拟构造子模式或者多态性共存模式,工厂模式的用意是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中
设计原则:单一指责,依赖倒置,开闭原则
1.4抽象工厂
介绍: 工厂方法模式与抽象工厂模式最大的区别在于,在工厂方法模式中,工厂创造的是一个产品,而在抽象工厂模式中,工厂创造的是一个产品族。
设计原则:单一指责,依赖倒置,开闭原则
1.5建造者模式
![builder](https://i-blog.csdnimg.cn/blog_migrate/92ce6de1f636f7ad18c5209bf55dcbf9.png)
常用场景:需要构建一批构建过程相同但表示不同的产品,而构建过程非常复杂
介绍:建造模式是对象的创建模式。建造模式可以将一个产品的内部表象与产品的生成过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。
设计原则: 遵循单一职责、开闭原则
常用场景:需要在运行时动态的创建指定实例种类的对象,或是需要复用其状态
介绍:通过给出一个原型对象来指明所要创建的对象的类型,然后用复制这个原型对象的办法创建出更多同类型的对象
设计原则:无
二、结构模式
常用场景:需要修改或屏蔽某一个或若干个类的部分功能,复用另外一部分功能,可使用静态代理,若是需要拦截一批类中的某些方法,在方法的前后插入一些一致的操作,假设这些类有一致的接口,可使用JDK的动态代理,否则可使用cglib
介绍:代理模式给某一个对象提供一个代理对象,并由代理对象控制原有对象的引用
设计原则:体现功能复用
2.2适配器模式
、、
![adapter](https://i-blog.csdnimg.cn/blog_migrate/8bb73bb216c6964f994bb6342491eef9.png)
常用场景:需要使用一个类的功能,但是该类的接口不符合使用场合要求的接口,可使用定制适配器,又或者是有一个接口定义的行为过多,则可以定义一个缺省适配器,让子类选择性的覆盖适配器的方法
介绍:把一个类的接口变换成客户端所期待的另一种结构,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作
原则: 遵循开闭原则、体现功能复用
2.3装饰器模式
介绍:装饰器模式又名包装模式,装饰器模式用以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案
设计原则: 遵循迪米特、单一职责、开闭原则,破坏里氏替换,体现功能复用
2.4 桥接模式
设计原则: 遵循单一职责、迪米特、开闭原则,体现功能复用
2.5 组合模式
![composite](https://i-blog.csdnimg.cn/blog_migrate/2f52d40ada308bb5657e4337e400dedb.png)
常用场景:当有一个结构可以组合成树形结构,且需要向客户端提供一致的操作接口,使得客户端操作忽略简单元素与复杂元素
介绍:有时又叫做部分-整体模式。组合模式将对象组织到树结构中,可以用来描述整体与部分的关系。组合模式可以使客户端将单纯元素与复合元素同等看待
设计原则: 遵循依赖倒置、开闭原则,破坏接口隔离
2.6 享元模式
2.7 门面模式
介绍:外部与子系统的通信(交互)必须通过统一的门面对象进行
设计原则:遵循迪米特
三、行为型模式
3.1 观察者模式
![observer](https://i-blog.csdnimg.cn/blog_migrate/592bad66b8259fd349341dc687154219.png)
![observer](https://i-blog.csdnimg.cn/blog_migrate/592bad66b8259fd349341dc687154219.png)
常用场景:需要将观察者与被观察者解耦或者是观察者的种类不确定
介绍:又叫发布订
阅模式,观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察这对象,使它们能够自动更新自己
设计原则:遵循迪米特、开闭原则
3.2 模板方法模式
![templateMethod](https://i-blog.csdnimg.cn/blog_migrate/77cdede17b42a7236f7f3b6dc8d8900d.png)
![templateMethod](https://i-blog.csdnimg.cn/blog_migrate/77cdede17b42a7236f7f3b6dc8d8900d.png)
常用场景:一批子类的功能有可提取的公共算法骨架
介绍:准备一个抽象类,将部分逻辑以抽象方法形式让子类去实现,不同哦能的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现,这就是模板方法模式的用意
设计原则:破坏里氏替换,体现功能复用
常用场景:行为的请求者与行为的处理者耦合度过高
介绍:命令模式把一个请求或在操作封装到一个对象中,命令模式允许系统使用不同的 请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能
介绍:命令模式把一个请求或在操作封装到一个对象中,命令模式允许系统使用不同的 请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能
设计原则:遵循迪米特、开闭原则
常用场景:一个对象在多个状态下行为不同,且这些状态可互相转换
介绍:状态模式允许一个对象在其内部状态改变的时候改变其行为,这个对象唉看上去就像是改变了它的类一样
设计原则:遵循单一职责、依赖倒置、开闭原则
3.5责任链模式
![chainOfResponsibility](https://i-blog.csdnimg.cn/blog_migrate/cfd1416986d1b667e13e347072d6f614.png)
常用场景:一个请求的处理需要多个对象当中的一个或几个协作处理
介绍:很多对象是由每一个对象对其下家的引用而连接起来形成一条链,请求在这个链上传递,直到链上的某一个对象囧丁处理此请求,发出这个请求的客户端并不知道链上的哪个对象最终处理了这个对象,这使得系统可以在不影响客户端的情况下动态地重新组织链和分配责任
设计原则:遵循迪米特
常用场景:有一种语言被频繁的使用
介绍:解释器模式可以定义出其文法的一种表示,并同时提供一个解释器。客户端可以使用这个解释器来解释这个语言中的句子
设计原则:遵循单一职责
常用场景:一个系列的对象交互关系十分复杂
介绍:中介者模式包装了一系列对象相互作用的方式,使得这些对象不必相互明显引用。从而使它们可以较松散地耦合
设计原则:遵循迪米特,破坏单一职责
常用场景:作用于一个数据结构之上的操作经常变
介绍:访问者模式的目地是封装一些施加于某种数据结构元素之上的操作。一旦这些操作需要修改的话,接受这个操作的数据结构则可以保持不变
设计原则:遵循倾斜的开闭原则
常用场景:算法或者策略需要经常替换
介绍:其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换