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










