0%

11种行为型模式

[toc]

解释器模式#

https://www.runoob.com/design-pattern/interpreter-pattern.html

这种模式实现了一个表达式接口,该接口解释一个特定的上下文。

项目中的expresion里的evalute本质上就是解释器模式。

模板方法模式#

抽象类定义n个抽象方法,提供一个对外接口确定抽象方法的调用顺序, 子类负责实现这几个内部的抽象方法。

责任链模式#

if/else太多了判断起来很烦, 用setNext设置一个责任链,谁完不成就交给下一个,这样后续直接添加setNext就好,不用再加else。

适用于需要“动态”添加判断条件情况。

命令模式#

把命令作为一个commond类看待,这样可以把命令放到队列或者栈里去处理。

迭代器模式#

提供给外界一个iterator()专门用于next遍历, 这样外界不用关心内部的存储逻辑。

备忘录模式#

https://www.runoob.com/design-pattern/memento-pattern.html

备忘录模式就是在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态

观察者模式#

A做了一件事之后,把自己的状态通知 B\C\D这3个观察者(需要绑定观察者)

注意和访问者不是同一个模式。

仲裁者#

A\B\C\D 这几个类对象每当做完一件事,就调用 E.update(xxx), E会负责更新整体状态,或者作为中间人去调度其他几个类。

状态模式#

状态不同, doAction时发生的事情也不同,类似于项目中做互信时,不同状态有不同的doAction处理逻辑

d146ad3e20bcc846133a5bb32f2bef82890f29d6

和策略模式的区别: 状态模式在于状态之间是由关联的,是可以切换状态的,且状态A到状态B可能有限制。
但是策略模式的话,不同的策略之间可能是独立的,仅仅是有同一个基类,但不存在可以切换的状态图。

策略模式#

装备了不同的武器或者策略,就会有不同的战斗结果。 我只要不断切换自己装备的武器子类即可。

访问者模式#

同一份数据或者树型结构, 可以用不同的vistor去访问,得到不同的结果或者展示。