行为型设计模式

阅读本文大概需要10分钟

tips:每次都回忆一下面向对象六大原则,心里默默回想一下是如何描述的吧

  1. 单一职责
  2. 开闭原则
  3. 里氏替换原则
  4. 依赖倒置原则
  5. 接口隔离原则
  6. 迪米特原则

23种设计模式可以分类成行为型、创建型以及结构型,本文就对剩下的行为型设计模式进行简单介绍,相关代码已经在github仓库中,欢迎各位提出宝贵意见

迭代器模式(Iterator Pattern)

  • 定义
    提供一种方法顺序的访问一个容器对象中的各个元素,而又不暴露该对象的内部表示

  • 场景
    遍历一个容器对象时

  • UML 类图

image

观察者模式(Observer Pattern)

  • 定义
    定义了一种一对多的依赖关系,让多个观察者对象同事监听某一个主题对象。当这个主题对象发生改变时,会通知所有观察者对象,使它们自己更新自己

  • 场景

    • 关联行为场景,需要注意的是,关联行为时可拆分的,而不是组合关系
    • 事件多级触发场景
    • 跨系统消息交换场景
  • UML 类图

image

解释器模式(Interpreter Pattern)

  • 定义
    给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子

  • 场景
    当有一个语言需要解释执行,并且你可将该语言中的句子表示为一个抽象语法树时

  • UML 类图

image

中介者模式(Mediator Pattern)

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

  • 场景
    当对象之间的交互操作很多且每个对象的行为操作都依赖彼此时,为防止修改一个对象的行为时,涉及修改其他对象时

  • UML 类图

image

访问者模式(Visitor Pattern)

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

  • 场景

    • 对象结构比较稳定,但经常需要在此对象结构上定义新的操作
    • 需要对一个对象结构中的对象进行很多不同的并且不相关的操作时
  • UML 类图

image

备忘录模式(Memento Pattern)

  • 定义
    在不破坏封装性的前提下,捕获一个对象的内容状态,并在该对象之外保存这个状态,这样以后就可将该对象恢复到原先保存的状态

  • 场景
    需要保存一个对象在某一个时刻的状态或部分状态

  • UML 类图

image

状态模式(State Pattern)

  • 定义
    当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类

  • 场景

    • 一个对象的行为取决于它的状态,并且它必须在运行时根据状态改变它的行为
    • 代码中包含大量与对象状态有关的条件语句
  • UML 类图

image

策略模式(Strategy Pattern)

  • 定义
    定义了一系列的算法,并将每一个算法封装起来,而且使它们可以相互替换

  • 场景

    • 针对同一类型问题的多种处理方式,仅仅是具体行为有差别
    • 需要安全的封装多种同一类型的操作时
    • 出现同一抽象类有多个子类,而又需要使用 if-else 或者 switch-case 来选择具体子类时
  • UML类图

image

模板方法模式(Template method Pattern)

  • 定义
    定义一个操作中的算法的框架,而将一些步骤延迟到子类中。

  • 场景

    • 多个子类有共有的方法而且逻辑基本相同
    • 重要、复杂的算法,可以把核心算法设计为模板,周边的细节功能则由各个子类实现
    • 重构时,模板方法模式是一个经常使用的模式,把相同的代码抽取到父类当中,然后通过钩子函数约束其行为
  • UML类图

image

命令模式(Command Pattern)

  • 定义
    将一个请求封装成一个对象,从而让用户使用不同的请求把客户端参数化

  • 场景

    • 需要抽象出待执行的动作,然后以参数的形式提供出来
    • 在不同的时刻指定、排列和执行请求
    • 需要支持取消操作
    • 需要支持事务操作
  • UML类图

image

责任链模式(Chain of responsibility Pattern)

  • 定义
    使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系

  • 场景

    • 多个对象处理同一请求,但具体由哪个对象处理则在运行时动态决定
    • 在请求者不明确的情况下向多个对象中的一个提交一个请求
    • 需要动态指定一组对象处理请求
  • UML类图

image

上两篇文章已经简单说明了创建型设计模式以及结构性设计模式,剩下的行为型设计模式都在本文展示完了,需要回顾的同学可以点击链接跳转到上两篇文章进行回顾。

那么23种设计模式简介文章就此完成,当然以后还会进行精装修一下。

RiderWu wechat
欢迎您扫一扫上面的微信公众号,目前试运营当中。