●Template Method(模板方法)
意图:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。Template Method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
示例:
这种模式在MFC源码中被大量使用。
典型的有: CView基类对WM_PANT消息的相应
void CView::OnPaint()
{
file://处理流程
CPaintDC dc(this);
OnPrepareDC(&dc);
OnDraw(&dc);
}
然后派生类实现OnPrepareDC,OnDraw完成具体的步骤。
●Bridge(桥接)
意图:将抽象部分与它的实现部分分离,使它们都可以独立地变化。
示例:MFC中的 (Serialization) 序列化机制
在序列化机制中,CArchive 和 CFile共同完成了数据的永久存储
CArchive定义了数据存取的共用接口
而CFile及其派生类则完成了存储过程的具体实现(文件、内存缓冲区等等)
这样,数据存储的接口部分与具体实现部分被分离了。给CArchive搭配不同的CFile派生类就可实现不同的物理存储。
●Observer(观察者)
意图:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新。
示例:MFC 中的文档视图结构
一个文档对象可以对应多个视图对象,视图对象是对文档对象的诠释。
当文档对象发生变化后,调用UpdateAllViews 更新视图
然后各个视图的OnUpdate 被调用。
●Chain of Responsibility (职责链)
意图:
使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。
示例:
MFC消息链
在MFC中各 CCmdTarget派生类定义自己对特定消息及命令的响应动作。
消息和命令沿着消息映射定义的链进行传递,直到有对象处理他。