一。访问者模式
访问者模式和策略模式类似,不同的是策略模式里的“策略”主要通过Setter传递,而访问者模式里的“访问者”主要在具体调用的时候通过方法参数传递;不仅如此,策略模式里强调“策略”是一种算法,而访问者模式里强调“访问者”会调用被访问者(上图中的ConcreteElementA和ConcreteElementB)的方法,这意味着具体被访问者(注意不是抽象)的引用会通过调用访问者的方法传递给访问者;访问者模式中由于访问者的抽象依赖了具体的被访问者,违背了依赖倒置原则,使得增加一个具体的被访问者变得困难(需要同时在访问者的抽象和具体的访问者中加入新的方法)。
二。状态模式
状态模式和策略模式非常相似,将“策略”的切换部分或全部交由“策略”自己处理,这就是状态模式。
三。解释器模式
对算法进行最小化拆分,使用时再根据问题进行组合,以应对问题的变化,这就是解释器模式;解释器模式根据问题将算法和参与运算的值组合成一个树型结构,非叶子节点(NonterminalExpression)为算法,叶子节点(TerminalExpression)为参与运算的值,最后通过遍历这颗树求得问题的解。