摘要:
意图:定义对象的一种一对多的依赖关系,当一个对象的状态发生改变时,所以依赖于它的对象都要得到通知并且自动更新适用性:一个对象依赖于另外一个对象时,将这两者封装在独立的对象中以使它们各自独立地改变和使用当对一个对象的改变需要同时改变其它对象而不知道具体有多少对象有待改变当一个对象必须通知其它对象,而它又不能假设其它对象是谁。换言之,你不希望这些对象时紧密耦合的。示例图:mvc模式示例代码:(mvc模式略…) 阅读全文
摘要:
意图:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可将该对象恢复到原先保存的状态。一个备忘录(Memento)是一个对象,它存储另一个对象在某个瞬间的内部状态,而后者称为备忘录的原发器(Originator)适用性:必须保持某个对象在某个时刻的状态如果一个用接口来让其它对象这节得到这些状态,将会暴露对象的实现细节并破坏对象的封装性示例图:示例代码://线条类class CLine{public: CLine(LineState STATE);public: ~CLine(void);public: //移动到目标位置 void MoveTo(POINT 阅读全文
摘要:
意图:用一个中介对象来封装一系列的独享交互。中介者使得各对象不需要显式的相互引用,从而使得其耦合松散,而且可以独立的改变他们之间的交互.适用性:一组对象以定义好,但是通信复杂,相互依赖关系结构混乱一个对象引用其他对象并且直接通信想定制一个分布在多个类中的行为,但是又不想定义多个子类示例图:示例程序://信息变化之后通知中介者,中介者来调用相关对象进行相应的控制class CMediator{public: CMediator();public: ~CMediator(void); public: void InfoChanged(int id) { m_PTitle->SetId(id) 阅读全文
摘要:
意图:提供一种方法顺序访问一个聚合对象中各个元素,而不需要暴露该对象的内部表示适用性:访问一个聚合类而无需暴露它的内部表示支持对聚合对象的多种遍历为遍历不同的聚合结构提供一个统一的接口示例图:示例代码:个人观点可以参见stl的list/set/map等…. 阅读全文
摘要:
意图:给定一个语言,定义它的文法表示,并定义一个解释器,这个解释器使用该标识来解释语言中的句子。如果一种特定类型的问题发生的频率足够高,那么就可值得将该问题的各个实例表述为一个简单语言的句子,这样就可以构建一个解释器,该解释器通过解释这些句子来解决该问题。解释器模式使用类来表达每一条文法规则,在规则右边的符号是这些类的实例变量。适用性:当有一个语言需要解释执行,并且你可将该语言中的句子表示为一个抽象语法树,可以使用解释器模式。而当存在以下情况时该模式效果最好l 该文法的类层次结构变得庞大而无法管理。此时语法分析程序生成器这样的工具是最好的选择。他们无需构建抽象语法树即可解释表达式,这样可以节省 阅读全文