设计模式专辑——策略模式、状态模式、访问者模式的比较

 >>版权声明:本文为原创文章,请不要拷贝转载。

 

1.比较

(状态模式)

状态模式

 (策略模式)

 (访问者模式)

 

这三种模式有类似的地方,其中状态模式和策略模式相似度非常高,通过类图根本无法区分。那么我们怎么去理解这三个模式呢。

其实这三个模式都可以看做是某种状态与相应处理策略(处理逻辑)的协作关系的表述

我们先看访问者模式的类图,图中的每个Element其实可以视为某种状态。Vistor接口定义了每种状态对应的抽象处理方法,即一个Vistor相当于一组策略。Vistor接口的定义隐含了状态的数量是固定的这一前提。那么整个访问者模式其实是在扩展策略组。

我们总结下,访问者的应用场景是状态固定的情况下,动态增加处理策略组合。

状态模式中每个状态事实上包含两个部分,一个是某种状态,一个是这种状态对应的处理策略。也就是说状态和处理策略不可分割。状态增加了处理策略也相应增加。

总结下,状态模式下一种状态只有一种处理策略,策略和状态紧密绑定,扩展状态的同时策略相应增加。

看懂了上面两个之后,再来理解策略模式就简单多了,策略模式中只体现了处理逻辑,并没有体现状态,状态被抽离出去了。处理逻辑和状态没有对应关系。我们所做的只是不断的扩展策略(处理逻辑)。至于这个策略会用在什么状态之下,并不关心。A状态可以使用1策略,也许也可以使用2策略,这完全取决于调用者。

总结下,策略模式不关心状态,只有处理逻辑的扩展。

 

注:图片来自维基百科。 

 

喜欢的话可以打赏一下哦!!!

支付宝

微信

posted @ 2019-01-16 20:19  PaganMonkey  阅读(1361)  评论(0编辑  收藏  举报

喜欢的话可以打赏一下哦!!!

支付宝

微信