【读书笔记】设计模式第6章:行为型模式2

本文主要分析了中介者模式、观察者模式、备忘录模式、訪问者模式、状态模式、解释器模式。介绍它们的定义、优缺点、使用场景,以及实例代码。

为了深刻地理解设计模式。最重要的还是动手编写代码。


我參照书中的例程又一次构想了一些更加生动、易于理解的样例。希望大家喜欢。
代码能够通过下面链接进行浏览:

这些代码都经过编译执行。保证没有错误。


  • 中介者模式
    • 定义
      • 也叫调停者模式
      • 用一个中介对象来封装一系列同事对象之间的交流,使得同事对象之间不须要显式地相互作用
      • 角色:抽象中介者、详细中介者、抽象同事、详细同事
    • 长处
      • 降低类之间的依赖
      • 避免同事对象之间的过度耦合
      • 将对象的行为和协作抽象化
    • 注意事项
      • 不应当在责任划分混乱的时候使用
      • 不应该在数据类和操作类之间使用
      • 正确理解封装
  • 观察者模式
    • 定义
      • 也叫公布订阅模式
      • 定义对象之间一种一对多的依赖关系,使得每当这个类被改动时。全部依赖于这个类的对象都会收到通知并得到更新
      • 角色:抽象主题、详细主题、抽象观察者、详细观察者
    • 长处
      • 观察者和被观察者之间是抽象耦合的
      • 支持广播通信
    • 缺点
      • 假设观察者许多,则性能会变差
      • 假设有循环依赖关系,则会导致死循环
      • 假设是观察者异步运行的,须要保证观察者收到通知的顺序
      • 观察者无法知道对象是怎样变化的
    • 使用场景
      • 关联行为场景
      • 事件多级触发场景
      • 跨系统的消息交换场景
    • 注意事项
      • 避免广播链。一个观察者也能够同一时候为被观察者。这样的情况维护性非常差
      • 异步处理问题。异步处理要考虑线程安全
  • 备忘录模式
    • 定义
      • 又称快照模式。Token模式
      • 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存状态。这样,以后就能够恢复原先保存的状态了
      • 角色:发起人、备忘录、负责人(负责管理备忘录)
    • 使用场景
      • 须要保存和恢复数据的相关状态场景
      • 提供一个可回滚的操作
      • 须要监控副本的场景。用于记录日志,用作兴许对程序分析
      • 数据库中的事务
    • 注意事项
      • 生命周期。

        建立备忘录之后就要使用,不使用就立即删除

      • 性能。

        不要频繁使用备忘录

  • 訪问者模式
    • 定义
      • 封装一些作用于某种数据结构中各元素的操作,它能够在不改变数据结构的前提下。定义一种新的操作
      • 角色:抽象訪问者、详细訪问者、抽象元素、详细元素、结构对象
    • 长处
      • easy添加新的操作
      • 将有关的行为集中到一个訪问者的对象中,而不是分散到一个个元素中
      • 能够同一时候訪问多个类中的私有成员
      • 累积状态。每一个訪问者都集中了相关的行为,所以在訪问的过程中将运行操作的状态积累在自己内部。而不是分散到非常多的元素中
    • 缺点
      • 不easy添加新的元素类型
      • 破坏封装性。

        訪问者必须知道类中的实现细节

      • 违背了依赖倒置原则。

        訪问者依赖于详细的元素,而不是抽象的元素

    • 使用场景
      • 一个对象包括非常多类对象,因为它们有不同的接口,无法使用迭代器迭代每一个对象。

      • 须要对一个对象结构体中的对象进行非常多不相关的操作
      • 业务规则要求遍历多个不同类型的对象
  • 状态模式
    • 定义
      • 又称为状态对象模式
      • 当一个对象改变状态时,同意改变其行为,这个对象好像看起来改变了类型一样
      • 角色:抽象状态、详细状态、环境
    • 长处
      • 结构清晰
      • 遵循设计原则
      • 封装性良好
    • 缺点
      • 子类太多,不易维护
    • 使用场景
      • 行为随着状态的改变而改变的情形
      • 代码中存在非常长的case语句
  • 解释器模式
    • 定义
      • 给定一门语言。定义它的文法表示,并定义一个解释器,该解释器使用该表达式来解释语言中的句子
      • 角色:抽象表达式、终结符表达式、非终结符表达式、环境、client
    • 长处
      • 简单的语法分析工具
      • 语法可扩展
    • 缺点
      • 类的数量过多
      • 採用递归调用
    • 使用场景
      • 解决反复发生的问题
      • 一个简单语法须要解释的场景
      • 正则表达
原文地址:https://www.cnblogs.com/claireyuancy/p/6912503.html