Design Pattern 学习笔记

Design Pattern 学习笔记

1     创建型模式

1.1 Abstract Factory

提供一个创建一系列相关或者相互依赖对象(Window, ScrollBar)的接口(CreateWindowCreateScrollBar),而无需制定他们的具体类。Client通过使用WidgetFactory的具体子类MotifWidgetFactory or PMWidgetFactory来决定创建哪套windowscrollbar

1.2 Factory Method

定义了一个用于创建对象的接口 CreateDocument,让子类MyApplication来决定创建什么样的documentFactory Methoddocument 类的创建延迟到子类MyApplication中。

1.3 Builder

将一个复杂对象RTFReader的构建与它的表示(ASCIITextWidget)分离。使同样的构建过程可以创建不同的表示(ASCIITextWidget)

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

提供一种方法顺序访问一个聚合对象中各个元素,而不暴露该对象的内部表示。

这是多态迭代器。对应抽象基类,具体的ListSkipList有各自的ListIteratorSkipListIterator

迭代器的作用:

不同的迭代方式可以设计不同的迭代器,比如前序,后序等,均采用不同的迭代方式。

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个字母的字符就可以表示所有的文字。

posted on 2008-03-20 09:35  dqshll  阅读(172)  评论(0)    收藏  举报

导航