23种设计模式归纳(三)——行为型模式

23种设计模式归纳(一)——创建型模式
23种设计模式归纳(二)——结构型模式

行为型设计模式简述

1. 责任链模式

角色:抽象处理者具体处理者
定义:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。
适用场景:

  • a.有多个对象可以处理一个请求,哪个对象该请求运行时刻自动确定。
  • b.在不明确指定接收者的情况下,向多个对象中的一个提交一个请求。
  • c.可处理一个请求的对象集合应该被动态指定。

2. 命令模式

角色:命令角色具体命令角色客户角色请求者接收者
定义:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。
【小秘密:通过在请求和处理之间加上了一个中间人的角色。通过对中间人角色的特殊设计来形成不同的模式】

3. 解释器模式

角色:抽象表达式角色终结符表达式角色非终结符表达式角色上下文[环境]角色客户角色
定义:定义语言的文法,并且建立一个解释器解释该语言中的句子。
何时使用:如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子。这样就可以构建一个解释器,该解释器通过解释这些句子来解决该问题。
优点:

  • 1、可扩展性比较好,灵活。
  • 2、增加了新的解释表达式的方式。
  • 3、易于实现简单文法。

缺点:

  • 1、可利用场景比较少。
  • 2、对于复杂的文法比较难维护。
  • 3、解释器模式会引起类膨胀。
  • 4、解释器模式采用递归调用方法。

使用场景:

  • 1、可以将一个需要解释执行的语言中的句子表示为一个抽象语法树。
  • 2、一些重复出现的问题可以用一种简单的语言来进行表达。
  • 3、一个简单语法需要解释的场景。

终结符,通俗的说就是不能单独出现在推导式左边的符号,也就是说终结符不能再进行推导。不是终结符的都是非终结符。非终结符可理解为一个可拆分元素,而终结符是不可拆分的最小元素。如:有α → β ,则α 必然是个非终结符。

4. 迭代器模式

角色:抽象迭代器角色具体迭代器角色容器角色具体容器角色
定义:提供一种方法访问一个容器对象中各个元素,而又不暴露该对象的内部细节。

5. 中介者模式

角色:抽象调停者具体调停者同事角色
定义:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示的相互引用,从而使其耦合松散,而且可以独立的改变他们之间的交互。
典型应用:MVC的service层

6. 备忘录模式

角色:备忘录角色备忘发起角色备忘录管理角色
在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。
【注意:对备忘发起角色应该采用宽接口,对其他的角色或者对象则采用窄接口进行访问】

7. 观察者模式

角色:抽象目标角色具体目标角色抽象观察者角色具体观察者角色
定义:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。

8. 状态模式

角色:使用环境状态角色具体状态
定义:允许一个对象在其内部状态改变时改变它的行为。
【适用情况:一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为;一个操作中含有庞大的多分支的条件语句,且这些分支依赖于该对象的状态】

9. 策略模式

角色:算法使用环境抽象策略具体策略
定义:将算法封装成拥有共同接口的单独的类,并且使他们之间可以互换。
【注意:区分策略和状态模式的关键看行为是由状态驱动还是由一组算法驱动,这条规则似乎有点随意,但是在判断时还是需要考虑它。】

10. 模板方法模式

角色:抽象类具体类

仅用到了继承关系

11. 访问者模式

定义:表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。
角色:访问者角色、具体访问者角色、元素角色、具体元素角色、对象结构角色
使用场景: 1、对象结构中对象对应的类很少改变,但经常需要在此对象结构上定义新的操作。 2、需要对一个对象结构中的对象进行很多不同的并且不相关的操作,而需要避免让这些操作"污染"这些对象的类,也不希望在增加新操作时修改这些类。

行为型模式类图

行为型模式类图

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

郭建華

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值