简述
- 行为设计模式的作用是为了定义对象或者类之间的沟通和交流.
责任链模式
- 特征
- 每个处理者拥有终止处理链的权利
- 处理链是有序的
- 传参可以作为上下文存在
- 做什么事情
- 允许你将请求沿着处理者链进行发送。 收到请求后, 每个处理者均可对请求进行处理, 或将其传递给链上的下个处理者。
- 理解
- 有多个处理者顺序处理某个事情,从这个角度来说(1-n),一个东西需要多个处理者且有序处理
- 基于这个是有序的,其实可以作为一个流程(流程的步骤存在变动)来进行
- 各个步骤间不要存在过多的数据依赖/步骤依赖
- 其实我不太能接受这个模式去定义一个流程
- 因为各个步骤其实大多有数据依赖/步骤依赖,并不能随意进行替换/调整,容易出错
- 另一个是因为但是存在数据依赖,却需要通过上下文进行传递.不能体现各个步骤的产出和输入,也不能体现各个步骤的数据依赖
- 基于每个处理者都拥有终止的权利,经常用作校验功能模块的模式
- 也可以用作多个处理者只有一个会真正进行处理,这里把选择哪个处理者和处理的权利放在一起了
- 当然也是可以只用来做选择,把各个if分配到执行者当中去
- 适用于if有优先级
将请求动态传递给一系列的潜在接收者, 直至其中一名接收者对请求进行处理。
- 目标
- 参与者
- 一个接口(定义一个handle方法/setNext方法)
- 结构
- 场景
- 校验
- 需要多个顺序执行的处理者(不推荐)
- 不明确处理者/处理方法的情况,把选择处理的权利和处理的权利执行放在一起的处理者(最终只有一个处理者进行处理)
命令模式
- 理解
- 其实就是调用者跟执行者代码分开,然后多增加一个上下文
- 如果想实现回退的功能呢,那么在执行者增加一个undo行为,上下文需要记录所有的执行者并在需要的时候调用执行者的undo方法
- 目标
- 参与者
- 结构
- 场景
迭代器模式
中介模式
- 理解
- 中介者:加强版的上下文?
- 这个上下文实际上是拥有各个组件的实例的
- 这个上下文不止能获取信息,还能指挥其他组件工作
- 更多地,我们也可以用这个上下文来管理各个组件的生命周期
- 组件:就是具体的实例(继承同一个父类/实现同一个接口)
- 中介者模式,相当于阻隔各个组件间的联系,通过一个中介者(加强版的上下文)进行联系
- 可以用作各个子类之间的相互联系或者沟通需要通过一个上下文/中介者进行联系
- 本来各个组件的关系是可能是n-n(多对多),但是使用一个上下文之后就变成n-1(只对一个中介者)
- 目标
能让你减少对象之间混乱无序的依赖关系。 该模式会限制对象之间的直接交互, 迫使它们通过一个中介者对象进行合作。
- 参与者
- 各个组件(需要有传入上下文的方法)
- 上下文/中介者(需要有注册/传入各个组件的方法)
- 结构
- 中介者拥有各个组件实例
- 各个组件实例拥有上下文/中介者
- 场景
- 如果有子类需要调用其他子类进行协同的,可以使用该模式
- 现实中,我们理解不同子类应该做同一类事情,只是做事方式不同
- 但是还是可能出现需要相互协作的情况
访问者模式
- 理解
- 它能将算法与其所作用的对象隔离开来。(这句话我也理解不了)
- 如果需要对一组继承体系进行同一个类型操作
- 除了在这个父类/接口搞一个抽象方法,还能定义一个访问者对象/体系
- 访问者对象需要与各个子类有关联关系,即需要依赖各个子类
- 然后再访问者中定义对各个子类的操作
- 参与者
- 一个继承体系(需要定义一个accept方法,用以接受访问者对象)
- 定义一个访问者对象/继承体系(需要定义对上面各个实现类的操作)
- 结构
- 场景
- 当子类各个逻辑都非常简短(你不希望这些逻辑分散到各个子类去)
- 当有些行为不属于该类对象的时候,你可以搞个访问者体系
备忘录模式
- 理解
- 就是对象提供自我复制/自我回复的功能
- 然后由一个调用者/负责人(caretaker)调用,并存放在历史中
- 目标
- 允许在不暴露对象实现细节的情况下保存和恢复对象之前的状态。
- 参与者
- 结构
- 场景
观察者模式
- 理解
- 一个步骤执行后需要执行多个步骤(无顺序/相互之间没有依赖)
- 目标
- 参与者
- 结构
- 场景
状态模式
- 理解
- 这个很容易理解,如果一个对象/行为在不同状态下逻辑不一致,用一个state继承体系来体现出来,然后封装到一个上下文中
- 不同状态下的执行操作可能会切换到自行切换到另一个状态去
- 目标
- 让你能在一个对象的内部状态变化时改变其行为, 使其看上去就像改变了自身所属的类一样。
- 参与者
- 结构
- 场景
策略模式
- 理解
- 很简单啦,就是同一件事不同的做法可以直接封装起来,在context进行切换
- 目标
- 它能让你定义一系列算法, 并将每种算法分别放入独立的类中, 以使算法的对象能够相互替换。
- 参与者
- 结构
- 场景
模板方法模式
- 理解
- 就是把流程中会多样的地方放到子类去实现
- 原本是一个流程处理(中间有if/else这些东西),然后就变成多个子类了,这个时候就需要进行子类的初始化+选择子类了(这时就需要创建类的模式).
- 目标
- 参与者
- 结构
- 场景
posted @
2022-06-03 16:26
躲在墙角的
阅读(
58)
评论()
编辑
收藏
举报