[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处理逻辑
和策略模式的区别: 状态模式在于状态之间是由关联的,是可以切换状态的,且状态A到状态B可能有限制。
但是策略模式的话,不同的策略之间可能是独立的,仅仅是有同一个基类,但不存在可以切换的状态图。
策略模式#
装备了不同的武器或者策略,就会有不同的战斗结果。 我只要不断切换自己装备的武器子类即可。
访问者模式#
同一份数据或者树型结构, 可以用不同的vistor去访问,得到不同的结果或者展示。