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

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

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

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

行为型模式

  • 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 代表一个对象在某个时刻的内部状态。

设计模式之美:Behavioral Patterns(行为型模式)的更多相关文章

  1. php设计模式(一):简介及创建型模式

    我们分三篇文章来总结一下设计模式在PHP中的应用,这是第一篇创建型模式. 一.设计模式简介 首先我们来认识一下什么是设计模式: 设计模式是一套被反复使用.容易被他人理解的.可靠的代码设计经验的总结. ...

  2. C#面向对象设计模式纵横谈——2.Singleton 单件(创建型模式)

    一:模式分类 从目的来看: 创建型(Creational)模式:负责对象创建. 结构型(Structural)模式:处理类与对象间的组合. 行为型(Behavioral)模式:类与对象交互中的职责分配 ...

  3. .NET设计模式(7):创建型模式专题总结(Creational Pattern)(转)

    概述 创建型模式,就是用来创建对象的模式,抽象了实例化的过程.它帮助一个系统独立于如何创建.组合和表示它的那些对象.本文对五种常用创建型模式进行了比较,通过一个游戏开发场景的例子来说该如何使用创建型模 ...

  4. .NET设计模式(7):创建型模式专题总结(Creational Pattern)

    ):创建型模式专题总结(Creational Pattern)    创建型模式专题总结(Creational Pattern) --.NET设计模式系列之七 Terrylee,2006年1月 转载: ...

  5. 设计模式(Java版)-创建型模式之简单工厂模式

    前言:这段时间在学习设计模式,本人也是小菜一枚(所以写的如果有错误的地方请大大们给予指出).这个东西也是我一直想学习的,从点点滴滴做起,记录下自己每天的领悟! 一.工厂模式的动机 在软件系统中,经常面 ...

  6. 设计模式之美:Creational Patterns(创建型模式)

    创建型模式(Creational Patterns)抽象了对象实例化过程. 它们帮助一个系统独立于如何创建.组合和表示它的那些对象. 一个类创建型模式使用继承改变被实例化的类. 一个对象创建型模式将实 ...

  7. 设计模式之美:Structural Patterns(结构型模式)

    结构型模式涉及到如何组合类和对象以获得更大的结构. 结构型类模式采用继承机制来组合接口实现. 结构型对象模式不是对接口和实现进行组合,而是描述了如何对一些对象进行组合,从而实现新功能的一些方法. 因为 ...

  8. NET设计模式 第二部分 行为型模式(18):观察者模式(Observer Pattern)

    概述 在软件构建过程中,我们需要为某些对象建立一种“通知依赖关系” ——一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知.如果这样的依赖关系过于紧密,将使软件不能很好地抵御 ...

  9. NET设计模式 第二部分 行为型模式(17):迭代器模式(Iterator Pattern)

    概述 在面向对象的软件设计中,我们经常会遇到一类集合对象,这类集合对象的内部结构可能有着各种各样的实现,但是归结起来,无非有两点是需要我们去关心的:一是集合内部的数据存储结构,二是遍历集合内部的数据. ...

随机推荐

  1. Windows操作系统优化(Win7版) - 进阶者系列 - 学习者系列文章

    Windows系统优化是个永恒的话题.在操作系统的打包制作方面更是有得一拼.前面提到的龙帝国社区的XP系统就是一个典型的例子,打包好的系统就已经是经过优化的,使用者无需再使用优化工具进行处理.下面就对 ...

  2. linux修改IP

     linux命令行修改IP的2个方法 2010-12-30 10:25:50 分类: LINUX 方式一: ifconfig eth0 192.168.1.18 netmask 255.255.255 ...

  3. SQL server while语句、存储过程

    1.循环语句 2.存储过程 存储过程(stored procedure)有时也称为sproc.存储过程存储于数据库中而不是在单独的文件中,有输入参数.输出参数以及返回值等. 3.四种存储过程类型(类似 ...

  4. flex box 布局

    .box{ display:flex; } .box { display: inline-flex; } .box { display:-webkit-flex; display: flex; } f ...

  5. 读书笔记:<世界是数字的>

    世界是数字的?第一次听到这个名词不由的感到惊讶,我有听过地球是海洋的,那世界不应该是人类共同拥有的吗或者也可以说世界是大自然的?为什么世界偏偏是数字的呢?我带着满心的疑问去看了那本<世界是数字的 ...

  6. mydumper原理5

    前言 之前介绍了Oracle官方的多线程逻辑导入导出工具mysqlpump,但已经操作过的同学会发现其多线程的单位还是表,换句话说, 单表依然是 单线程导出 .网易早已使用mydumper/myloa ...

  7. Linux经久不衰的应用程序

    Linux里面的应用程序一贯以高安全性,高性价比(功能/所占空间),此次记录一下Linux里面比较常用的而且经久不衰的应用程序. Shell:               bash(它结合了 csh ...

  8. Linux学习笔记4-三种不同类型的软件的安装(绿色软件、rpm软件、源代码软件)

    在Linux下软件分三种: 1.绿色软件:即不用安装直接就能用的软件 2.rpm安装包:以rpm结尾的可执行文件  3.源码文件:没有进行过编译和打包的文件,需要编译后再进行安装 一.绿色软件的安装 ...

  9. paip.输入法编程---输入法ATIaN历史记录 c823

    paip.输入法编程---输入法ATIaN历史记录 c823 作者Attilax ,  EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog.csd ...

  10. 【2014】【】辛星【php】【秋】【1】php构建开发环境

    **************************什么是开发环境*********************** 1.我们学习PHP,是使用它来做web用的,通俗理解,就是做站点. 2.站点的执行须要 ...