程序员

《设计模式之美》笔记:设计模式-行为型

2021-01-24  本文已影响0人  Jinglever

清单

模式 概要 什么时候选用 注意 实操
观察者 在对象之间定义一个一对多的依赖关系,当一个对象状态改变的时候,所有依赖的对象都会自动收到通知 · 观察者变动较频繁
· 希望借助异步来提高吞吐量
· 同步阻塞
· 异步非阻塞
· 进程内
· 进程间
· 线程池
· 消息队列
模板 在一个方法中定义一个算法骨架,并将某些步骤推迟到子类中实现,这里的“算法”可以理解为广义上的“业务逻辑” · 复用
· 扩展
- · 继承
· 抽象
策略 定义一簇算法类,将每个算法分别封装起来,让它们可以互相替换 · 概念上属于同类的不同对象,可对外暴露同样的接口,而各自有不同的实现
· 添加新“策略”时可以最小化、集中化代码改动
- · 不同策略实现相同的接口或继承相同的父类
· 工厂类运行时确定选用的“策略”
· 查表法或if-else分支判断
职责链 将请求的发送和接收解耦,让多个接收对象都有机会处理这个请求。将这些接收对象串成一条链,并沿着这条链传递这个请求,直到链上的某个接收对象能够过处理它为止 · 过滤器
· 拦截器
- · 处理器Filter
· 处理器链FilterChain
状态 状态机的一种实现方式 状态种类不太多,而事件触发的动作比较复杂 - · 每种状态封装成一个类,将事件和动作包在其中
迭代器 用来遍历集合对象 - 遍历的同时增删集合元素,会发生未决行为 · 容器,定义iterator()方法
· 迭代器,定义三个方法:hasNext(), currentItem(), next()
访问者 允许一个或者多个操作应用到一组对象上,解耦操作和对象本身 很少用,不好理解 - 将操作独立出来一个类,对一组不同的对象进行操作
备忘录 在不违背封装原则的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便之后恢复对象为先前的状态 用来防丢、撤销、恢复等 - 对于大对象的备份,可以低频全量备份,高频增量备份
命令模式 将请求(命令)封装为一个对象,这个对象支持被传递,从而能够将请求(命令)做排队、异步执行等操作 用来控制命令的执行,比如异步、延迟、排队、撤销重做等 - 很少用
解释器 为某个语言定义它的语法(或者叫文法)表示,并定义一个解释器用来处理这个语法 如:翻译器,计算器,自定义接口告警规则等 - 一般做法是,将语法规则拆分成一些小的独立单元,然后对每个单元进行解析,最终合并为整个语法规则的解析
中介 定义了一个单独的(中介)对象,来封装一组对象之间的交互。将这组对象之间的交互委派给与中介对象交互,来避免对象之间的直接交互 只有当参与者之间的交互关系错综复杂,维护成本很高的时候,我们才考虑使用中介模式 好处是简化了一组对象之间的交互,坏处是中介类可能会编程大而复杂的“上帝类” 引入中介这个中间层,将一组对象之间的交互关系(或者依赖关系)从多对多(网状关系)转换成一对多(星状关系)
- - - - -



设计模式要干的事情就是解耦

模板模式

回调

- 简介
    - 回调是一种双向调用关系。A类事先注册某个函数F到B类,A类在调用B类中的P函数的时候,B类反过来调用A类注册给它的F函数。这里的F函数就是“回调函数”。A调用B,B反过来又调用A,这种调用机制就叫做“回调”。
- 同步回调
    - 函数返回之前执行回调函数
    - 像模板模式
        - 从代码实现上来看,回调和模板模式完全不同。回调基于组合关系来实现,把一个对象传递给另一个对象,是一种对象之间的关系;模板模式基于继承关系来实现,子类重写父类的抽象方法,是一种类之间的关系。
- 异步回调
    - 函数返回之后执行回调函数
    - 像观察者模式

策略模式

状态机

迭代器模式

中介模式 vs 观察者模式

上一篇 下一篇

猜你喜欢

热点阅读