Design Pattern 学习笔记
Design Pattern 学习笔记
1 创建型模式
1.1 Abstract Factory
提供一个创建一系列相关或者相互依赖对象(Window, ScrollBar)的接口(CreateWindow,CreateScrollBar),而无需制定他们的具体类。Client通过使用WidgetFactory的具体子类MotifWidgetFactory or PMWidgetFactory来决定创建哪套window和scrollbar。
1.2 Factory Method
定义了一个用于创建对象的接口 CreateDocument,让子类MyApplication来决定创建什么样的document,Factory Method将document 类的创建延迟到子类MyApplication中。
1.3 Builder ?
将一个复杂对象RTFReader的构建与它的表示(ASCII,Text,Widget)分离。使同样的构建过程可以创建不同的表示(ASCII,Text,Widget)。
1.4 Prototype
用原型实例(Prototype)指定创建对象的种类。通过拷贝(Clone)这个原型来创建对象。
在Prototype,分层的类关系,都是先Clone虚函数;在Client这边,调用基类Prototype的虚函数Clone,来创建具体的ConcretePrototypes。
1.5 Chain Of Responsibility
为解除请求的发送者与接受者之间的耦合,而使多个对象有机会处理这个请求,将这些对象连成一条链,并延着链传递该请求,直到一个对象处理它。
2.行为型模式
2.1 Command
将一个请求封装为一个Command对象,从而可用不同的请求对Client进行参数化,对Command进行排队或记录日志,可以支持undo这样的事务(Transaction)操作。
2.2 Iterator
提供一种方法顺序访问一个聚合对象中各个元素,而不暴露该对象的内部表示。
这是多态迭代器。对应抽象基类,具体的List和SkipList有各自的ListIterator和SkipListIterator。
迭代器的作用:
不同的迭代方式可以设计不同的迭代器,比如前序,后序等,均采用不同的迭代方式。
Iterator简化了聚合的接口。
同一聚合上,多个iterator,彼此没有互相影响。
2.3 Observer
定义对象Subject间的一对多的依赖关系,以便当Subject发生变化时,所有依赖于他的Observer均得到通知,并进行刷新。
2.4 Strategy
定义一系列算法,把它们封装起来,并且使它们可以相互替换,使算法的变化可以独立于使用它的客户。
3.结构型模式
3.1 Composite
Composite的关键是一个类,即可以代表图元,也可以代表一个容器。
例如复合控件menu中实际包含一些子控件Text。再如cad中的复合图形。
3.2 Decorate
动态的给一个对象添加一些额外的职责。就扩展功能而言decorate比生成子类方式更加灵活。
例如,边框和scrollbar。
注意,decorate中有一个指向VisualComponet的指针。这是实现decorate的关键。
Decorate改变一个类的外壳,而Strategy是改变一个类的内核。
3.3 Proxy
为其他对象提供一种代理以控制对这个对象的访问。
一个代理对象替代真正的对象,需要时负责实例化真正的对象。
ImageProxy是一个Image的代理。
3.4 Flyweight
运用共享技术有效的支持大量细粒度对象。
如处理文本,行列和字符,每个字符一个对象的话,效率低下。
将相同的字符作为共享,只要实现26个字母的字符就可以表示所有的文字。
浙公网安备 33010602011771号