设计模式学习笔记
将实例的创建策略独立出来
Builder:
抽象对象生成过程并将其参数化。
将实例的创建逻辑独立出来
Singleton:
定义全局唯一对象(需要注意线程安全)。
Prototype:
通过克隆对象实例创建新对象(注意深/浅拷贝之分)。
结构类模式:
Facade:
Decoration:
简化对象继承树,将概念扩展交由第三方对象处理。经典应用案例->DHTML,换肤控件,Stream。概念的组合会在这个模式中被用到。原则上能组合就尽量不要继承。
Flyweight:
一系列的对象共享数据存储空间以降低单个数据尺寸
Composite:
提出对象组合概念,特例->对象的递归定义->Tree Node VS Tree Node Collection
Proxy:
将调用者与被调用者之前的平台差异与具体业务逻辑分离。经典应用案例->Web Service, Atlas Ajax Method.
行为类模式:
Strategy:
Template :
将逻辑套路与各个具体步骤实现分离。
Command:
将对象操作(指令)封装成对象以便对操作进行后续维护/护理。
Interpreter:
建立一套指令处理体系,通过对指令的处理实现更灵活的逻辑定制(可以结合Command模式)
Memento:
维护一个指令存储结构(列表),以帮助对象进行状态回滚或前移。经典应用案例: undo / redo.
Status:
当对象的某个状态被改变时,触发一组相应的动作(逻辑)。经典应用案例:.Net中的属性访问设置器(get, set)
Observer:
建立起一套对象通知机制,将通知动作与对象本身进行分离。经典应用案例:事件机制。
Mediator:
当两个对象之间已经存在过多调用依赖时,可创建一个mediator对象用于维护对象间多对多的依赖(逻辑)关系,将多对多简化为一对多。
Iterator:
将对象(集合对象)的内部结构与遍历逻辑进行分离。经典应用案例:.Net中的IEnumerable接口
Chain of Responsibility:
在特定业务逻辑中的一组对象中建离起类似于生产线的依赖调用关系。
Visitor:
根据调用者的类形返回相应数据。
我最喜欢的几个模式:
Observer: 它以对象为单位将业务逻辑中的上下游关系分离,使上游和下游不用关心对方是谁。
Proxy: 它以环境为单位进行了程序集的分离,通过Proxy可以将来自两个不同环境的业务连接起来。
Decoration: 可以在不改变继承树的前提下对业务逻辑进行扩展。
Template: 它以代码块/函数为单位将业务逻辑进行分离,使我们在实现一段逻辑的时候不用关心具体调用的是哪个函数。