`
文章列表
允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。   考虑一个表示网络连接的类TCPConnection。一个TCPConnection对象的状态处于若干不同状态之一:连接已建立(Established)、正在监听(Listening)、连接已关闭(Closed)。当一个TCPConnection对象收到其他对象的请求时,它根据自身的当前状态做出不同的反应。例如,一个Open请求的结果依赖于该连接是处于连接已关闭状态还是连接已建立状态。State模式描述了TCPConnection如何在每一种状态下表现出不同的行为。 这一模式的关键思想是引入了一个称为TCPStat ...
定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 将一个系统分割成一系列相互协作的类有一个常见的副作用:需要维护相关对象间的一致性。 这一模式中的 ...
在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。 一个备忘录(memento)是一个对象,它存储另一个对象在某个瞬间的内部状态,而后者称为备 ...
用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。 面向对象设计鼓励将行为分布到各个对象中。这种分布可能会导致对象间有许多连 ...
提供一种方法顺序访问一个聚合对象中各个元素,而又不需要暴露该对象的内部表示。 将对列表的访问和遍历从列表对象中分离出来并放入一个迭代器对象中。迭代器类定义了一个访问该列表元素的接口。迭代器对象负责跟踪 ...
给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。 如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子。这样就可以构建一个解释器,该解释器通过解释这些句子来解决该问题。 搜索匹配一个模式的字符串是一个常见问题。正则表达式是描述字符串模式的一种标准语言。与其为每一个的模式都构造一个特定的算法,不如使用一种通用的搜索算法来解释执行一个正则表达式,该正则表达式定义了待匹配字符串的集合。 解释器模式描述了如何为简单的语言定义一个文法,如何在该语言中表示一个句子,以及如何解释这些句子。 当有一个语言需要解 ...
将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。 命令模式通过将请求本身变成一个对象来使工具箱对象可向未指定的应用对象提出请求。这个对 ...
使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,知道有一个对象处理它为止。 这一模式的想法是,给多个对象处理一个请求的机会,从而解耦发送者和接收者。该请求沿对象链传递直至其中一个对象处理它。从第一个对象开始,链中收到请求的对象要么亲自处理它,要么转发给链中的下一个候选者。提交请求的对象并不明确地知道哪一个对象将会处理它,我们说该请求有一个隐式的接收者。要沿链转发请求,并保证接收者为隐式的,每个在链上的对象都有一致的处理请求和访问链上后续者的接口。   在以下条件中使用Responsibility链: 1、有多个的对象可 ...

行为模式

行为模式涉及到算法和对象间职责的分配。行为模式不仅描述对象或类的模式,还描述它们之间的通信模式。这些模式刻划了在运行时难以跟踪的复杂的控制流。它们将你的注意力从控制流转移到对象间的联系方式上来。   行 ...
为其他对象提供一种代理以控制对这个对象的访问。 对一个对象进行访问控制的一个原因是为了只有在我们确实需要这个对象时才对它进行创建和初始化。   1、远程代理(Remote Proxy):为一个对象在不同的地址空间提供局部 ...
运用共享技术有效地支持大量细粒度的对象。 Flyweight模式描述了如何共享对象,使得可以细粒度地使用它们而无需高昂的代价。 Flyweight是一个共享对象,它可以同时在多个场景(context)中使用,并且在每个场景中Flyweight都可以作为一个独立的对象,这一点与非共享对象的实例没有区别。 内部状态存储于Flyweight中,它包含了独立于Flyweight场景的信息,这些信息使得Flyweight可以被共享。而外部状态取决于Flyweight场景,并根据场景而变化,因此不可共享。用户对象负责在必要的时候将外部状态传递给Flyweight。 Flyweight模式对那些通常因 ...
为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 将一个系统划分成为若干个子系统有利于降低系统的复杂性。一个常见的设计目标是使子系统间的通信和相 ...
动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更为灵活。 有时我们希望给某个对象而不是整个类添加一些功能。使用继承机制是添加功能的一种有效途径,从其他类继承过来的可以被多个 ...
Composite使得用户对单个对象和组合对象的使用具有一致性。 Composite模式的关键是一个抽象类,它既可以代表图元,又可以代表图元的容器。 以下情况使用Composite模式: 1、想表示对象的部分-整体层次结构。 2、希望用户忽略 ...
将抽象部分与它的实现部分分离,使它们都可以独立地变化。 当一个抽象可能有多个实现时,通常用继承来协调它们。抽象类定义对该抽象的接口,而具体的子类则用不用方式加以实现。但是此方法有时不够灵活。继承机制将抽象部分与它的实现部分固定在一起,使得难以对抽象部分和实现部分可以独立地进行修改、扩充和重用。 将Window抽象和它的实现部分分别放在独立的类层次结构中。其中一个类层次结构针对窗口接口(Window、IconWindow、TransientWindow),另外一个独立的类层次结构针对平台相关的窗口实现部分,这个类层次结构的根类为WindowImp。 对Window子类的所有操作都是用Wind ...
Global site tag (gtag.js) - Google Analytics