
设计模式
流浪狗
这个作者很懒,什么都没留下…
展开
-
Abstract Factory(抽象工厂)---对象创建型模式
提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。客户仅与抽象类定义的接口交互,而不使用特定的具体类的接口。当你要强调一系列相关的产品对象的设计以便进行联合使用时。当你提供一个产品类库,而只想显示它们的接口而不是实现时。这一具体的工厂创建具有特定实现的产品对象。为创建不同的产品对象,客户应使用不同的具体工厂。AbstractFactory讲产品对象的创建延迟到...原创 2011-05-01 20:09:36 · 127 阅读 · 0 评论 -
行为模式
行为模式涉及到算法和对象间职责的分配。行为模式不仅描述对象或类的模式,还描述它们之间的通信模式。这些模式刻划了在运行时难以跟踪的复杂的控制流。它们将你的注意力从控制流转移到对象间的联系方式上来。 行为类模式使用继承机制在类间分配行为。模板方法是一个算法的抽象定义,它逐步地定义该算法,每一步调用一个抽象操作或一个原语操作,子类定义抽象操作以具体实现该算法。另一种行为类模式是Interpret...原创 2011-05-30 21:48:39 · 165 阅读 · 0 评论 -
Chain of Responsibility(职责链)---对象行为型模式
使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,知道有一个对象处理它为止。这一模式的想法是,给多个对象处理一个请求的机会,从而解耦发送者和接收者。该请求沿对象链传递直至其中一个对象处理它。从第一个对象开始,链中收到请求的对象要么亲自处理它,要么转发给链中的下一个候选者。提交请求的对象并不明确地知道哪一个对象将会处理它,我们说...原创 2011-05-31 20:59:03 · 111 阅读 · 0 评论 -
Command(命令)---对象行为型模式
将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。命令模式通过将请求本身变成一个对象来使工具箱对象可向未指定的应用对象提出请求。这个对象可被存储并像其他的对象一样被传递。这一模式的关键是一个抽象的Command类,它定义了一个执行操作的接口。其最简单的形式是一个抽象的Execute操作。具体的Command子类将接收者作为其一个实...原创 2011-05-31 21:15:42 · 140 阅读 · 0 评论 -
Interpreter(解释器)---类行为型模式
给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子。这样就可以构建一个解释器,该解释器通过解释这些句子来解决该问题。搜索匹配一个模式的字符串是一个常见问题。正则表达式是描述字符串模式的一种标准语言。与其为每一个的模式都构造一个特定的算法,不如使用一...原创 2011-05-31 21:33:04 · 164 阅读 · 0 评论 -
Iterator(迭代器)---对象行为型模式
提供一种方法顺序访问一个聚合对象中各个元素,而又不需要暴露该对象的内部表示。将对列表的访问和遍历从列表对象中分离出来并放入一个迭代器对象中。迭代器类定义了一个访问该列表元素的接口。迭代器对象负责跟踪当前的元素。将遍历机制与列表对象分离使我们可以定义不同的迭代器来实现不同的遍历策略,而无需在列表接口中列举它们。 迭代器模式可用来:1、访问一个聚合对象的内容而无需暴露它的内部表示。...原创 2011-05-31 21:57:05 · 175 阅读 · 0 评论 -
Mediator(中介者)---对象行为型模式
用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。面向对象设计鼓励将行为分布到各个对象中。这种分布可能会导致对象间有许多连接。在最坏的情况下,每一个对象都知道其他所有对象。可以通过将集体行为封装在一个单独的中介者对象中以避免这个问题。中介者负责控制和协调一组对象间的交互。中介者充当一个中介以使组中的对象不再相互显式...原创 2011-06-01 21:05:32 · 123 阅读 · 0 评论 -
Memento(备忘录)---对象行为型模式
在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。一个备忘录(memento)是一个对象,它存储另一个对象在某个瞬间的内部状态,而后者称为备忘录的原发器。当需要设置原发器的检查点时,取消操作机制会向原发器请求一个备忘录。原发器用描述当前状态的信息初始化该备忘录。只有原发器可以向备忘录中存取信息,备忘录对其他的对象“不可见”。...原创 2011-06-01 21:41:21 · 112 阅读 · 0 评论 -
Observer(观察者)---对象行为型模式
定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。将一个系统分割成一系列相互协作的类有一个常见的副作用:需要维护相关对象间的一致性。这一模式中的关键对象是目标(subject)和观察者(observer)。一个目标可以有任意数目的依赖它的观察者。一旦目标的状态发生改变,所有的观察者都得到通知。作为对这个通知的响应,每个观察者都将查询目标...原创 2011-06-02 00:01:42 · 161 阅读 · 0 评论 -
State(状态)---对象行为型模式
允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。 考虑一个表示网络连接的类TCPConnection。一个TCPConnection对象的状态处于若干不同状态之一:连接已建立(Established)、正在监听(Listening)、连接已关闭(Closed)。当一个TCPConnection对象收到其他对象的请求时,它根据自身的当前状态做出不同的反应。例如,一个O...原创 2011-06-03 22:17:43 · 191 阅读 · 0 评论 -
Strategy(策略)---对象行为型模式
定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。 当存在以下情况时使用Strategy模式:1、许多相关的类仅仅是行为有异。“策略”提供了一种用多个行为中的一个行为来配置一个类的方法。2、算法使用客户不应该知道的数据。可使用策略模式以避免暴露复杂的、与算法相关的数据结构。3、一个类定义了多种行为,并且这些行为在这个类的操作...原创 2011-06-04 00:49:18 · 121 阅读 · 0 评论 -
Template Method(模板方法)---类行为型模式
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。Template Method 使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。一个模板方法用一些抽象的操作定义一个算法,而子类将重定义这些操作以提供具体的行为。通过使用抽象操作定义一个算法中的一些步骤,模板方法确定了它们的先后顺序,但它允许子类改变这些具体步骤以满足它们各自的需求。 模板方法应用于下列情况:...原创 2011-06-04 20:30:43 · 121 阅读 · 0 评论 -
Proxy(代理)---对象结构型模式
为其他对象提供一种代理以控制对这个对象的访问。对一个对象进行访问控制的一个原因是为了只有在我们确实需要这个对象时才对它进行创建和初始化。 1、远程代理(Remote Proxy):为一个对象在不同的地址空间提供局部代表。Remote Proxy负责对请求及其参数进行编码,并向不同地址空间中的实体发送已编码的请求。Remote Proxy可以隐藏一个对象存在于不同地址空间的事实。2、...原创 2011-05-30 20:53:27 · 120 阅读 · 0 评论 -
Flyweight(享元)---对象结构型模式
运用共享技术有效地支持大量细粒度的对象。Flyweight模式描述了如何共享对象,使得可以细粒度地使用它们而无需高昂的代价。Flyweight是一个共享对象,它可以同时在多个场景(context)中使用,并且在每个场景中Flyweight都可以作为一个独立的对象,这一点与非共享对象的实例没有区别。内部状态存储于Flyweight中,它包含了独立于Flyweight场景的信息,这些信息使...原创 2011-05-29 21:24:49 · 122 阅读 · 0 评论 -
Builder(生成器)---对象创建型模式
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。使得生成器可以隐藏这个产品的表示和内部结构。同时也隐藏了该产品是如何装配的。因为产品是通过抽象接口构造的,在改变该产品的内部表示时所要做的只是定义一个新的生成器。将构造代码和表示代码分开,Builder模式通过封装一个复杂对象的创建和表示方式提高了对象的模块性。使你可对构造过程进行更精细的控制。Builder...原创 2011-05-01 20:35:02 · 109 阅读 · 0 评论 -
Factory Method(工厂方法)---对象创建型模式
定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method是一个类的实例化延迟到其子类。Factory Method的一个潜在缺点在于客户可能仅仅为了创建一个特定的产品对象,就不得不创建工厂(Creator)的子类。用Factory Method在一个类的内部创建对象通常比直接创建对象更灵活。Factory Method给子类一个挂钩以提供对象的扩展版本。实现主...原创 2011-05-01 20:45:25 · 164 阅读 · 0 评论 -
Prototype(原型)---对象创建型模式
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。当一个系统应该独立于它的产品创建、构成和表示时,要使用Prototype模式。当要实例化的类是在运行时刻指定时。为了避免创建一个与产品类层次平行的工厂类层次时。当一个类的实例只能有几个不同状态组合中的一种时。建立相应数目的原型并克隆它们可能比每次用合适的状态手工实例化该类更方便一些。Prototype有许多和Abs...原创 2011-05-01 20:54:16 · 113 阅读 · 0 评论 -
Singleton(单件)---对象创建型模式
保证一个类仅有一个实例,并提供一个访问它的全局访问点。原创 2011-05-01 20:56:02 · 114 阅读 · 0 评论 -
创建型模式
用一个系统创建的那些对象的类对系统进行参数化有两种常用方法。1、生成创建对象的类的子类:这对应于使用Factory Method模式。主要缺点是,仅为了改变产品类,就可能需要创建一个新的子类。2、对系统进行参数化的方法更多的依赖于对象复合。Abstract Factory由这个工厂对象产生多个类的对象。Builder由这个工厂对象使用一个相对复杂的协议,逐步创建一个复杂产品。Prototy...原创 2011-05-01 21:00:53 · 82 阅读 · 0 评论 -
结构型模式
Adapter适配器使得一个接口与其他接口兼容,从而给出了多个不同接口的统一抽象。Composite模式描述了如何构造一个类层次结构,这一结构由两种类型的对象(基元对象和组合对象)所对应的类构成。其中的组合对象使得你可以组合基元对象以及其他的组合对象,从而形成任意复杂的结构。Proxy模式中,proxy对象作为其他对象的一个方便的替代或占位符。Flyweight模式为了共享对象定义了一...原创 2011-05-01 21:09:42 · 117 阅读 · 0 评论 -
Adapter(适配器)---类对象结构型模式
将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。包装器Wrapper。你想使用一个已经存在的类,而它的接口不符合你的需求。你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作。类适配器和对象适配器有不同的权衡。1、类适配器:Adapter同时继承于Targ...原创 2011-05-01 21:41:42 · 133 阅读 · 0 评论 -
Bridge(桥接)---对象结构型模式
将抽象部分与它的实现部分分离,使它们都可以独立地变化。当一个抽象可能有多个实现时,通常用继承来协调它们。抽象类定义对该抽象的接口,而具体的子类则用不用方式加以实现。但是此方法有时不够灵活。继承机制将抽象部分与它的实现部分固定在一起,使得难以对抽象部分和实现部分可以独立地进行修改、扩充和重用。将Window抽象和它的实现部分分别放在独立的类层次结构中。其中一个类层次结构针对窗口接口(Wind...原创 2011-05-07 20:28:53 · 93 阅读 · 0 评论 -
Composite(组成)---对象结构型模式
Composite使得用户对单个对象和组合对象的使用具有一致性。Composite模式的关键是一个抽象类,它既可以代表图元,又可以代表图元的容器。以下情况使用Composite模式:1、想表示对象的部分-整体层次结构。2、希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。 用户使用Component类接口与组合结构的对象进行交互。如果接收者是一个叶...原创 2011-05-07 20:56:09 · 194 阅读 · 0 评论 -
Decorator(装饰)---对象结构型模式
动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更为灵活。有时我们希望给某个对象而不是整个类添加一些功能。使用继承机制是添加功能的一种有效途径,从其他类继承过来的可以被多个子类的实例所使用。但这种方法不够灵活,因为边框的选择是静态的,用户不能控制对组件加边框的方式和时机。一种较为灵活的方式是将组件嵌入另一个对象中,由这个对象添加边框。我们称这个嵌入的对...原创 2011-05-29 20:19:34 · 120 阅读 · 0 评论 -
Facade(外观)---对象结构型模式
为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。将一个系统划分成为若干个子系统有利于降低系统的复杂性。一个常见的设计目标是使子系统间的通信和相互依赖关系达到最小。引入一个外观(Facade)对象,它为子系统中较一般的设施提供了一个单一而简单的界面。它给用户提供了一个单一而简单的子系统接口。无需完全隐藏实现功能的那些类,即可将它们结...原创 2011-05-29 21:01:13 · 124 阅读 · 0 评论 -
Visitor(访问者)---对象行为型模式
表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。 需要对一个对象结构中的对象进行很多不同的并且不相关的操作,而你想避免让这些操作“污染”这些对象的类。Visitor使得你可以将相关的操作集中起来定义在一个类中。当该对象结构被很多应用共享时,用Visitor模式让每个应用仅包含需要用到的操作。定义对象结构的类很少改变,但经常需要在...原创 2011-06-04 20:59:28 · 130 阅读 · 0 评论