抽象工厂,决定产品系列的产品的组合,特点是创建同一款式的产品系列。缺点是增加产品组件,需要修改抽象工厂接口,影响抽象工厂子类。
builder,决定产品的各个部分的build的过程。替换相应的builder子类,就可以修改产品相应的各个part部件的实现;替换相应的Director子类,就可以修改builder组件的调用顺序(即控制创建过程)。
工厂方法,产品子类和creator子类一 一对应。不直接调用FactoryMethod操作,定义了何时调用FactoryMethod。扩展相关子类可以修改此调用时间
Prototype,产品自身就是自己的creator
Singleton,产生全局的单一实例
1)以上是创建型:创建型设计模式核心是通过替换直接调用new创建具体对象这种方式,从而去client代码和产品对象之间的耦合。client都是通过接口引用工厂,通过接口引用产品,所以替换更方便。
adapter,描述了client如何做到通过target接口,来使用Adaptee的操作函数。
bridge,“抽象接口定义”和“具体实现部分”分离。分离后,可以各自发展。
composite,从共同接口派生,使对单个对象和组合对象的使用具有一致性,并且支持递归组合。
Decorator,共同的父类,接口相同,可以透明的、递归的增加额外的职责。与composite区别是只有一个组件。与strategy区别是Decorator修饰component的外观,strategy提取分离component的内部策略实现。
façade,分层的概念中,层与层之间提供统一、集中的接口。
使不同层的对象不会出现网状交织。这样各层可以独立发展。façade对象承担上层请求转发给下层对应对象。
flyweight,分离对象的内部、外部状态,使得大量细粒度对象可以共享,节省存储空间
proxy,proxy是Realsubject接口的子集或者相同接口,从而代替Realsubject。proxy来控制Realsubject,而不是client直接控制和访问Realsubject。这样proxy可以对Realsubject进行各种额外的控制。
2)以上是结构性模式。
chain of responsibility,每个在链上的对象都有一致的处理请求和访问链上后继者的接口。链式传递请求,使得请求的发送者和接收者解耦。
直到某个处理
command,把请求封装为一个command对象,虽然抽象的接口一致,但是可以派生各种command子类。command对象中包含了对接收者的引用、和调用接收者的一系列操作,通过动态创建command子类对象以及创建时传入不同的接收者引用,可以达到动态配置(参数化)请求的目的。进而实现上下文相关的菜单。Command模式将调用操作的对象与知道如何实现该操作的对象解耦。增加新的Command变得很容易。
interpreter,解释器和文法表示分开。定义一种文法,定义一个解释器用抽象语法树辅助解释文法。同样的接口派生而来,以便递归组合,实现抽象的语法树。
iterator,将对聚合对象的“访问和遍历”从聚合对象中分离出来,并放入到一个iterator对象中。对client隐藏了composite的内部组织。
Mediator,控制和协调一组对象间的交互,对象只跟中介相连,对象间不直接相连,从而减少连接数。方便对象独立发展。
Memento,向originator请求一个保存了内部状态的Memento,后面需要恢复时,传回此Memento给Originator,从而Originator恢复回之前状态,并且不保留Originator的内部细节
observer,subject状态改变时,通知各个observer。两者独立发展,通过抽象接口调用,减少两者耦合。
state,把各个行为封装在接口一致的各个状态对象中,所以改变状态时,行为得到改变。并且把请求委托给他的状态对象来处理。state模式将与“特定状态”相关的行为局部化,并且将不同状态的行为分割开来。
strategy,物理结构和算法分离,算法封装在一个独立对象中。
template method,定义算法骨架,但一些具体实现由子类定义。把公共的操作过程,做成模板
visitor,对象中包含多个不同接口类型的子对象。访问操作封装为独立对象。结构对象和操作对象分离
3)以上是行为型模式。
对设计模式有兴趣的话,更详细的总结,可看我的ppt。
或者请参考《设计模式:可复用面向对象软件的基础》一书
英文版《Design Patterns: Elements of Reusable Object-Oriented Software》
来源:oschina
链接:https://my.oschina.net/u/4413947/blog/4273224