设计模式之美:Behavioral Patterns(行为型模式)

简介:

行为型模式涉及到算法和对象间职责的分配。

行为模式不仅描述对象或类的模式,还描述它们之间的通信模式。

这些模式刻划了在运行时难以跟踪的复杂的控制流。它们将你的注意力从控制流转移到对象间的联系方式上来。

  • 行为类模式使用继承机制在类间分派行为。
  • 行为对象模式使用对象复合而不是继承。描述一组对等的对象怎样相互协作以完成任一个对象都无法完成的任务。

行为型模式

  • Chain of Responsibility(职责链)
    • 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。
    • 将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它位置。
    • Avoid coupling the sender of a request to its receiver by giving more than one object a chance to handle the request.
    • Chain the receiving objects and pass the request along the chain until an object handles it.
  • Command(命令)
    • 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。
    • Encapsulate a request as an object, thereby letting you parameterize clients with different requests, queue or log requests, and support undoable operations.
  • Interpreter(解释器)
    • 给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。
    • Given a language, define a represention for its grammar along with an interpreter that uses the representation to interpret sentences in the language.
  • Iterator(迭代器)
    • 提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示。
    • Provide a way to access the elements of an aggregate object sequentially without exposing its underlying representation.
  • Observer(观察者)
    • 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
    • Define a one-to-many dependency between objects so that when one object changes state, all its dependents are notified and updated automatically.
  • Mediator(中介者)
    • 用一个中介对象来封装一系列的对象交互。
    • 中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
    • Define an object that encapsulates how a set of objects interact.
    • Mediator promotes loose coupling by keeping objects from referring to each other explicitly, and it lets you vary their interaction independently.
  • Memento(备忘录)
    • 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。
    • Without violating encapsulation, capture and externalize an object's internal state so that the object can be restored to this state later.
  • State(状态)
    • 允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。
    • Allow an object to alter its behavior when its internal state changes. The object will appear to change its class.
  • Strategy(策略)
    • 定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换。使得算法可独立于使用它的客户而变化。
    • Define a family of algorithms, encapsulate each one, and make them interchangeable.
    • Strategy lets the algorithm vary independently from clients that use it.
  • Template Method(模板方法)
    • 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。
    • Template Method 使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
    • Define the skeleton of an algorithm in an operation, deferring some steps to subclasses.
    • Template Method lets subclasses redefine certain steps of an algorithm without changing the algorithm's structure.
  • Visitor(访问者)
    • 表示一个作用于某对象结构中的各元素的操作。
    • Visitor 使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。
    • Represent an operation to be performed on the elements of an object structure.
    • Visitor lets you define a new operation without changing the classes of the elements on which it operates.

封装变化

当一个程序的某些方面的特征经常发生改变时,行为型模式就定义一个封装这个方面的对象。

这样当该程序的其他部分依赖于这个方面时,它们都可以与此对象协作。

这些模式通常定义一个抽象类来描述这些封装变化的对象,并且通常该模式依赖这个对象来命名。

  • 一个 Strategy 对象封装一个 Algorithm。
  • 一个 State 对象封装一个与状态相关的行为。
  • 一个 Mediator 对象封装对象间的协议。
  • 一个 Iterator 对象封装访问和遍历一个聚合对象中的各个构件的方法。

大多数模式有两种对象:封装该方面特征的新对象,和使用这些新的对象的已有对象。

对象作为参数

一些模式引入总是被用作参数的对象。例如一个 Visitor 对象是一个多态的 Accept 操作的参数。

一些模式定义一些可作为令牌到处传递的对象。例如 Command 代表一个请求,Memento 代表一个对象在某个时刻的内部状态。






本文转自匠心十年博客园博客,原文链接:http://www.cnblogs.com/gaochundong/p/design_pattern_behavioral_patterns.html,如需转载请自行联系原作者


目录
相关文章
|
10月前
|
设计模式 网络协议 Java
【设计模式】【行为型模式】状态模式(State)
一、入门 什么是状态模式? 状态模式(State Pattern)是一种行为设计模式,允许对象在其内部状态改变时改变其行为,使其看起来像是改变了类。状态模式的核心思想是将对象的状态封装成独立的类,并将
392 16
|
10月前
|
设计模式 算法 前端开发
【设计模式】【行为型模式】职责链模式(Chain of Responsibility)
一、入门 什么是职责链模式? 职责链模式是一种行为设计模式,它允许你将请求沿着一条链传递,直到有对象处理它为止。每个对象都有机会处理请求,或者将其传递给链中的下一个对象。 为什么需要职责链模式? 使用
362 16
|
10月前
|
设计模式 存储 Java
【设计模式】【行为型模式】备忘录模式(Memento)
一、入门 什么是备忘录模式? 备忘录模式(Memento Pattern)是一种行为设计模式,用于在不破坏封装性的前提下,捕获并外部化一个对象的内部状态,以便在需要时恢复该状态。它通常用于实现撤销操作
319 8
|
10月前
|
设计模式 消息中间件 Java
【设计模式】【行为型模式】命令模式(Command)
一、入门 什么是命令模式? 命令模式是一种行为设计模式,它将请求或操作封装为对象,从而使你可以用不同的请求对客户进行参数化,并支持请求的排队、记录、撤销等操作。 命令模式的核心是将“请求”封装为独立的
284 15
|
10月前
|
设计模式 算法 搜索推荐
【设计模式】【行为型模式】策略模式(Strategy)
一、入门 什么是策略模式? 策略模式是一种行为设计模式,允许在运行时选择算法或行为。它将算法封装在独立的类中,使得它们可以互换,而不影响客户端代码。 为什么需要策略模式? 策略模式的主要目的是解决算法
213 14
|
10月前
|
设计模式 数据采集 算法
【设计模式】【行为型模式】模板方法模式(Template Method)
一、入门 1.1、什么是模板方法模式? 模板模式(Template Method Pattern)是一种行为设计模式,它定义了一个算法的框架,并允许子类在不改变算法结构的情况下重新定义算法的某些步骤。
302 13
|
10月前
|
设计模式 Java 编译器
【设计模式】【行为型模式】解释器模式(Interpreter)
一、入门 什么是解释器模式? 解释器模式(Interpreter Pattern)是一种行为设计模式,用于定义语言的语法表示,并提供一个解释器来处理该语法。它通常用于需要解释和执行特定语言或表达式的场
229 11
|
10月前
|
设计模式 存储 JavaScript
【设计模式】【行为型模式】迭代器模式(Iterator)
一、入门 什么是迭代器模式? 迭代器模式(Iterator Pattern)是一种行为设计模式,它提供了一种顺序访问聚合对象中元素的方法,而不需要暴露其底层表示。迭代器模式将遍历逻辑从聚合对象中分离出
264 11
|
10月前
|
设计模式 XML JSON
【设计模式】【行为型模式】访问者模式(Visitor)
一、入门 什么是访问者模式? 访问者模式(Visitor Pattern)是一种行为设计模式,允许你将算法与对象结构分离。通过这种方式,可以在不改变对象结构的情况下,向对象结构中的元素添加新的操作。
316 10
|
10月前
|
设计模式 Java 程序员
【设计模式】【行为型模式】中介者模式(Mediator)
一、入门 什么是中介者模式? 中介者模式(Mediator Pattern)是一种行为设计模式,旨在减少对象之间的直接依赖,通过引入一个中介者对象来协调多个对象之间的交互。这种模式特别适用于对象间存在
246 9