创建型模式主要解决对象的创建问题,封装复杂的创建过程,解耦对象的创建代码和使用代码。
创建型模式 | 原理 |
单例模式 | 用来创建全局唯一的对象,一个类只允许创建一个对象(或者叫实例) |
工厂模式 | 用来创建不同但是相关类型的对象(继承同一父类或者接口的一组子类),由给定的参数来决定创建哪种类型的对象 |
建造者模式 | 用来创建复杂对象,可以通过设置不同的可选参数,“定制化”地创建不同的对象 |
原型模式 | 创建成本比较大的对象,利用对已有对象进行复制的方式进行创建,以达到节省创建时间的目的 |
结构型模式主要总结了一些类或对象组合在一起的经典结构
结构型模式 | 原理 |
代理模式 | 在不改变原始类(或叫被代理类)的情况下,通过引入代理类来给原始类附加功能。主要目的是控制访问,而非加强功能 |
桥接模式 | 将接口部分和实现部分分离,从而让它们可以较为容易、也相对独立地加以改变 |
装饰器模式 | 在不改变原始类接口的情况下,对原始类功能进行增强,并且支持多个装饰器的嵌套使用 |
适配器模式 | 一种事后的补救策略。适配器提供跟原始类不同的接口,而代理模式、装饰器模式提供的都是跟原始类相同的接口 |
门面模式 | 为子系统提供一组统一的接口,定义一组高层接口让子系统更易用。解决接口易用性问题、性能问题和分布式事务问题 |
组合模式 | 将对象组合成树形结构以表示“部分-整体”的层次结构。使得用户对单个对象和组合对象的使用具有一致性。 |
享元模式 | 运用共享技术有效地支持大量细粒度的对象 |
行为型设计模式主要解决的就是“类或对象之间的交互”问题
行为型模式 | 原理 |
观察者模式 | 定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己 |
模板模式 | 通过把不变行为搬移到基类,去除之类中的重复代码来体现它的优势 |
策略模式 | 将逻辑(算法)封装到一个类(Context)里面,通过组合的方式将具体算法的实现在组合对象中实现,再通过委托的方式将抽象接口的实现委托给组合对象实现 |
职责链模式 | 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。 |
状态模式 | 当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化。 |
迭代器模式 | 提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示。 |
访问者模式 | 封装一些作用于某种数据结构的各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作 |
备忘录模式 | 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可将该对象恢复到原先保存的状态。 |
命令模式 | 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作 |
解释器模式 | 解释器模式为某个语言定义它的语法(或者叫文法)表示,并定义一个解释器用来处理这个语法。只在一些特定的领域会被用到,比如编译器、规则引擎、正则表达式 |
中介模式 | 用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。 |