摘要:
备忘录模式(Memento),其含义是在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。 有时候我们有必要记录一个对象的内部状态,可以让用户取消不确定的操作或从错误中恢复过来,但是又不能破坏封装性。我们可用备忘录模式,一个备忘录是一个对象,它存储另一个对象在某个瞬间的内部状态,而后者称为备忘录的原发器。当需要设置原发器的检查点时,取消操作机制会向原发器请求一个备忘录。原发器用描述当前状态的信息初始化该备忘录,只有原发器可以向备忘录存取信息,备忘录对其他对象不可见。 其适用性: 必须保存一个对象在某一个时刻的(部分)状态,这样. 阅读全文
摘要:
中介者模式(Mediator),其含义是用一个中介对象来封装一系列的对象交互。中介者使个对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。面向对象的设计原则鼓励将行为分布到各个对象中去,这种分布可能会导致对象间有许多的连接,在最坏的情况下,每一个对象都其他对象,都和其他对象有联系。但这样降低了复用性。 可以通过一个将集体行为封装在一个单独的中介者对象中以避免这个问题。中介者负责控制和协调一组对象间的交互。使得对象间的不在相互显示引用,减少了很多的连接数目。它们之间不需要知道相互的信息,仅仅需要知道这个中间人就可以了。如大家在聊天室里聊天,不用管对方是谁,直接登入聊. 阅读全文
摘要:
迭代器模式(Iterator),其含义是提供一种方法顺序访问一个聚合对象中的各个元素,而又不需暴露该对象的内部表示。这一模式的关键思想是将对列表的访问和遍历从列表对象中分离出来并放入一个迭代器对象中。迭代器类定义了一个访问该列表元素的接口。可以理解为我们常见的java集合中的Iterator接口,非常类似。 其适用性: 访问一个聚合对象的内容而无需暴露它的内部表示, 支持对聚合对象的多种遍历, 为遍历不同的聚合结构提供一个统一的接口(即,支持多态迭代)。 其结构图: 迭代器和列表式耦合在一起的,而且客户对象必须知道遍历的是一个列表而不是其他聚合结构,我们在使用时其... 阅读全文
摘要:
解释器模式(Interpreter),其含义是给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。如果一个特定类型的问题发生的频率足够高,那么可能就值得将该问题各个实例表述为一个简单语言中的句子。这样构造一个解释器,通过解释这些句子来解决该问题了。解释器模式使用类来表示每一条文法规则。 其适用性: 当有一个语言需要解释执行,并且你可将该语言中的句子表示为一个抽象语法树时,可使用解释器模式,一下情况时效果更好: 该文法简单,对于复杂的文法,文法的类层次变得庞大而无法管理。此时语法分析程序生成器这样的工具是更好的选择。它们无需构建抽象语法树即可解释表达. 阅读全文
摘要:
命令模式(Command),其含义是将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。命令模式通过将请求本身变成一个对象来使工具箱对象可向未指定的应用对象提出请求,这个对象可被存储并像其他的对象一样被传递。 其适用性: 如果想抽象出待执行的动作以参数化某对象,可用回调函数表达这种参数化机制。所谓回调函数是指函数先在某处注册,而它将在稍后某个需要的时候被调用。Command模式是回调机制的一个面向对象的替代品, 在不同的时刻指定、排列和执行请求。一个Command对象可以有一个与初始请求无关的生存期。如果一个请求的接受者可用一种与. 阅读全文
摘要:
职责链模式(Chain Of Responsibility),其含义是使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,知道有一个对象处理它为止,我们可以考虑现实中的军情传递情况,以及java语言中的异常处理机制。 这个想法是给多个对象处理一个请求的机会,从而解耦发送者而后接受者。该请求沿对象链传递直至其中一个对象处理它,从第一个对象开始,链中收到请求的对象要么亲自处理它,要么转发给链中的下一个候选者。提交请求的对象并不明确地知道哪一个对象将会处理它——我们说该请求有一个隐式的接收者。要沿链发转请求,并保证接收者为隐式的,每. 阅读全文