浅谈行为型结构 - 观察者,模板,命令,状态,职责链

1. 观察者 - OBSERVER 

通俗解释1:想知道公司最新小姐姐情报的,加入公司的小姐姐情报邮件组就行了!HR小姐姐负责搜集情报,她发现的新情报不用一个一个通知,直接发布给邮件组,我们作为订阅者(观察者)就可以及时收到情报了!芜湖!

通俗解释2:就像订阅淘宝团购通知一样,当客户订阅了开团通知,团购发布者会把这个客户添加到订阅者列表里,一旦团购状态发生改变了,所有订阅了开团通知的客户都会自动收到开团通知

 2. 模板 - TEMPLATE

通俗解释1:韩剧的套路分为车祸,失忆,复仇,兄妹相爱。但每个套路针对不同的背景不同的剧情,都有不一样的展现方法,这就要看导演怎么拍啦

通俗解释2:就像小时候老师会在黑板上写题目,同学们需要把题目抄下来再开始解题,在这个抄的过程中很容易把体抄错或者抄漏。从代码思想考虑,这样的做法其实会有很多处重复代码。如果将老师出的题目作为一个模板,其他同学只需要继承这个模板再输出相对应的答案会简单方便许多。

定义一个操作的算法骨架,使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤

3. 命令 - COMMAND

通俗解释1:以餐厅经营为例,服务员作为Invoker,可以接受删除修改和给厨师传递来自客人的命令(command),厨师们作为receiver会来执行这些命令,但是只会在服务员通知他们的情况下才会执行命令。

命令模式把一个请求或者操作封装到一个对象中,从而可以用不同的请求对客户进行参数化;比如对请求排队或者记录请求log,以及支持可撤销的操作。命令模式允许请求的一方和发送的一方独立开来,使得请求的一方不必知道接收请求的一方的接口,更不必知道请求是怎么被接收,以及操作是否执行,何时被执行以及是怎么被执行的。

4. 状态 - 当一个对象的内在状态改变时允许改变其行为,看起来像是改变了类

通俗解释1:跟小姐姐交往时,一定要注意她的状态,在不同的状态时她的行为会有不同,比如你约她今天晚上去看电影,还在暧昧阶段的小姐姐会说“好啊,不过可以带上我朋友嘛?”,已经喜欢上你的小姐姐会说“几点钟?看完电影再去泡吧怎么样?“ 如果你看电影过程中表现良好的话,也可以把小姐姐的状态从不讨厌不喜欢变成喜欢哦。

通俗解释2:写代码是context,工作状态是state,上午工作状态、下午工作状态等具体的状态是concrete state。会写代码(context)的状态会根据写代码(context)中的时间属性来找到要call的方法是哪个状态类的。,判断逻辑都在具体状态里,这样工作类就没有过长的分支判断句了。

为了能根据当前状态选择完成相应行为的方法 绝大部分方法中会包含复杂的条件语句 修改其转换逻辑可能会涉及到修改所有方法中的状态条件语句 导致代码的维护工作非常艰难。状态模式解决了当控制一个对象转换的条件表达式过于复杂时的情况,把状态的判断逻辑转移到了表示不同状态的一系列类当中。

 5. 职责链 - CHAIN OF RESPONSIBLEITY

通俗解释1:在公司想申请加薪,员工向经理申请,经理向总经理申请,总经理向总监申请,最后总会提交到所对应的人,这种情况员工(客户端)就不需要知道到底是谁处理加薪,只需要跟上级领导申请就可以了。每个具体的handler可以设supervisor,不能处理的请求就会自动转到supervisor处理

使多个对象都有机会处理请求,避免请求的发送者和接受者之间的耦合关系。将这个对象连成一个链并沿着这条链传递该请求,知道有一个对象处理它为止。

 

Reference

  1. https://refactoringguru.cn/design-patterns
  2. 大话设计模式
  3. http://blog.sina.com.cn/s/blog_6e162de70101d0cf.html // 浅显易懂但话风极骚的相关帖
posted @ 2021-05-16 18:56  cancantrbl  阅读(135)  评论(0编辑  收藏  举报