前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >设计模式分类:行为型模式

设计模式分类:行为型模式

作者头像
运维开发王义杰
发布2023-08-10 14:36:46
1670
发布2023-08-10 14:36:46
举报

在上一篇文章中,我们介绍了设计模式的基本概念和分类,以及创建型模式和结构型模式。本文将介绍行为型模式,它们关注于对象之间的交互和职责分配,描述不同的对象如何协作完成单个对象无法完成的任务。

行为型模式

行为型模式(Behavioral Pattern)是对在不同的对象之间划分责任和算法的抽象化。行为型模式不仅仅关注类和对象的结构,而且重点关注它们之间的相互作用。通过行为型模式,可以更加清晰地划分类与对象的职责,并研究系统在运行时实例对象之间的交互。

根据其意图或目的,行为型模式可以分为两大类:

  • 类行为型模式(Class Behavioral Pattern):类的行为型模式使用继承关系在几个类之间分配行为,类行为型模式主要通过多态等方式来分配父类与子类的职责。
  • 对象行为型模式(Object Behavioral Pattern):对象的行为型模式则使用对象的聚合关联关系来分配行为,对象行为型模式主要是通过对象关联等方式来分配两个或多个类的职责。

根据“合成复用原则”,系统中要尽量使用关联关系来取代继承关系,因此大部分行为型设计模式都属于对象行为型设计模式。

下面我们来看看每一类中包含哪些具体的设计模式,并举一些简单的例子来说明它们的作用。

类行为型模式

类行为型模式包括以下两种:

  • 模板方法模式(Template Method Pattern):定义一个操作中的算法骨架,将算法的一些步骤延迟到子类中,使得子类在可以不改变该算法结构的情况下重定义该算法的某些特定步骤。
    • 例如:你想要做一道菜,你需要按照以下步骤进行:准备食材、切食材、烹饪食材、装盘上桌。这些步骤就是算法骨架,它们是固定不变的。但是具体做什么菜,每个步骤需要做什么事情,就可以由子类来决定。比如做红烧肉,准备食材就需要买猪肉、酱油、糖等;切食材就需要将猪肉切成小块;烹饪食材就需要先炒糖色再放入猪肉和调料;装盘上桌就需要将红烧肉放入盘中并撒上葱花。
  • 解释器模式(Interpreter Pattern):提供如何定义语言的文法,以及对语言句子的解释方法,即解释器。
    • 例如:你想要编写一个计算器程序,它可以接收用户输入的数学表达式,比如“1+2*3-4/5”,并计算出结果。你需要定义一个文法规则,来描述表达式的语法结构,比如“表达式 = 数字 | 表达式 + 数字 | 表达式 - 数字 | 表达式 * 数字 | 表达式 / 数字”等。然后,你需要定义一个解释器,来根据文法规则解析用户输入的表达式,并计算出结果。

对象行为型模式

对象行为型模式包括以下九种:

  • 策略模式(Strategy Pattern):定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的改变不会影响使用算法的客户。
    • 例如:你想要对一个数组进行排序,你可以选择不同的排序算法,比如冒泡排序、快速排序、归并排序等。这些排序算法就是策略,它们都可以实现数组的排序功能,但是效率和复杂度不同。你可以根据不同的需求和场景,选择不同的策略来执行排序操作。
  • 命令模式(Command Pattern):将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。
    • 例如:你想要使用遥控器控制电视机的开关、频道、音量等功能。你可以将每个功能封装为一个命令对象,然后将命令对象与遥控器的按钮关联起来。当你按下按钮时,就会发送对应的命令对象给电视机,电视机接收到命令对象后就会执行相应的操作。
  • 观察者模式(Observer Pattern):多个对象间存在一对多关系,当一个对象发生改变时,把这种改变通知给其他多个对象,从而影响其他对象的行为。
    • 例如:你想要订阅某个公众号的文章更新提醒,当公众号发布新文章时,你就会收到通知。这里公众号就是被观察者(主题),订阅者就是观察者。公众号可以有多个订阅者,当公众号发布新文章时,就会通知所有订阅者。
  • 责任链模式(Chain of Responsibility Pattern):把请求从链中的一个对象传到下一个对象,直到请求被响应为止。通过这种方式去除对象之间的耦合。
    • 例如:你想要请假一天,你需要先找到你的直接上级审批,如果上级同意了,就可以请假;如果上级不同意或者无权审批,就需要找到上级的上级审批,依此类推,直到找到能够审批的领导为止。这里每个领导就是责任链中的一个节点,他们可以根据自己的职责和权限来处理请求或者转发请求。
  • 中介者模式(Mediator Pattern):定义一个中介对象来简化原有对象之间的交互关系,降低系统中对象间的耦合度,使原有对象之间不必相互了解。
    • 例如:你想要在网上购买一件商品,你需要与卖家、物流公司、支付平台等多方进行沟通和协调。如果没有中介者,你需要自己联系每个方面,并处理各种复杂的逻辑和细节。如果有了中介者,比如电商平台,你只需要与电商平台打交道,电商平台会负责与其他方面进行沟通和协调,并提供给你统一的接口和服务
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-06-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 运维开发王义杰 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 行为型模式
    • 类行为型模式
      • 对象行为型模式
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档