首页 > 其他 > 详细

浅谈行为型结构(一)

时间:2021-05-17 00:36:37      阅读:11      评论:0      收藏:0      [点我收藏+]

1. 观察者 - 定义对象间一种一对多的依赖关系,当一个对象发生改变时,所有依赖于它的对象都得得到通知并被自动更新

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

技术分享图片

 

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

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

技术分享图片

3. 命令 - 将一个请求封装成对象,从而可以用不同的请求对客户进行参数化;对请求排队或者记录请求log,以及支持可撤销的操作。

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

技术分享图片

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

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

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

技术分享图片

 

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

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

技术分享图片

 

 

Reference

  1. https://refactoringguru.cn/design-patterns
  2. 大话设计模式

浅谈行为型结构(一)

原文:https://www.cnblogs.com/cancantrbl/p/14774531.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!