软件设计师-重点的行为型设计模式

一、命令模式(Command):

意图:(上午题)

  • 将一个请求封装为一个对象,从而使得可以用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。

结构:

适用性:

  • 抽象出待执行的动作,以参数化某对象。Command模式是过程语言中,回调(Callback)机制的一个面向对象的替代品。
  • 在不同的时刻指定、排列和执行请求。一个Command对象可以有一个与初始请求无关的生存期。如果一个请求的接收者可用一种与地址空间无关的方式表达,那么就可以将负责该请求的命令对象传递给另一个不同的进程并在那儿实现该请求。
  • 支持取消操作。Command的Execute操作可在实施操作前将状态存储起来,在取消操作时这个状态用来消除该操作的影响。Command 接口必须添加一个 Unexecute 操作,该操作取消上一次 Execute 调用的效果。执行的命令被存储在一个历史列表中。可通过向后和向前遍历这一列表并分别调用Unexecute 和Execute来实现重数不限的“取消”和“重做”。
  • 支持修改日志。这样当系统崩溃时,这些修改可以被重做一遍。在 Command 接口中添加装载操作和存储操作,可以用来保持变动的一个一致的修改日志。从崩溃中恢复的过程包括从磁盘中重新读入记录下来的命令并用 Execute 操作重新执行它们。

二、中介模式/调停者模式(Mediator):

意图:

  • 用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。

结构:

适用性:

  • 一组对象以定义良好,但是复杂的方式进行通信,产生的相互依赖关系结构混乱,且难以理解。
  • 一个对象引用其他很多对象并且直接与这些对象通信,导致难以复用该对象。
  • 想定制一个分布在多个类中的行为,而又不想生成太多的子类。

三、状态模式(State):

意图:

  • 允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。

结构:

适用性:

  • 一个对象的行为决定于它的状态,并且它必须在运行时刻根据状态改变它的行为。
  • 一个操作中含有庞大的多分支的条件语句,且这些分支依赖于该对象的状态。这个状态常用一个或多个枚举常量表示。通常,有多个操作包含这一相同的条件结构。State模式将每一个条件分支放入一个独立的类中。这使得开发者可以根据对象自身的情况将对象的状态作为一个对象,这一对象可以不依赖于其他对象独立变化。

四、访问模式(Visitor):

意图:

  • 表示一个作用于某对象结构中的各元素的操作。它允许在不改变各元素的类的前提下,定义作用于这些元素的新操作。

结构:

适用性:

  • 一个对象结构包含很多类对象,它们有不同的接口,而用户想对这些对象实施一些依赖于其具体类的操作。**
  • 需要对一个对象结构中的对象进行很多不同的,并且不相关的操作,而又想要避免这些操作“污染”这些对象的类。Visitor 使得用户可以将相关的操作集中起来定义在一个类中。当该对象结构被很多应用共享时,用 Visitor 模式让每个应用仅包含需要用到的操作。
  • 定义对象结构的类很少改变,但经常需要在此结构上定义新的操作。改变对象结构类需要重定义对所有访问者的接口,这可能需要很大的代价。如果对象结构类经常改变.那么可能还是在这些类中定义这些操作较好。

相关推荐

  1. 行为设计模式

    2024-04-30 07:08:01       39 阅读
  2. 行为设计模式(下)

    2024-04-30 07:08:01       33 阅读
  3. Golang 设计模式行为

    2024-04-30 07:08:01       35 阅读
  4. Python 设计模式行为

    2024-04-30 07:08:01       24 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-30 07:08:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-30 07:08:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-30 07:08:01       87 阅读
  4. Python语言-面向对象

    2024-04-30 07:08:01       96 阅读

热门阅读

  1. EureKa详解

    2024-04-30 07:08:01       33 阅读
  2. Docker in Docker原理与实战

    2024-04-30 07:08:01       35 阅读
  3. Golang 程序运行报汇编错误

    2024-04-30 07:08:01       25 阅读
  4. Chrome 插件如何开发?

    2024-04-30 07:08:01       33 阅读
  5. npm详解

    2024-04-30 07:08:01       37 阅读
  6. 贪心算法基础题(第三十三天)

    2024-04-30 07:08:01       38 阅读
  7. 从零手写实现 apache Tomcat-01-入门介绍

    2024-04-30 07:08:01       38 阅读
  8. 微信小程序实现用户手机号授权

    2024-04-30 07:08:01       33 阅读
  9. 人工智能论文:GPT, GPT-2, GPT-3 对比和演进的思路

    2024-04-30 07:08:01       28 阅读
  10. webpack 区分环境

    2024-04-30 07:08:01       30 阅读
  11. 图搜索算法详解

    2024-04-30 07:08:01       23 阅读