State模式和Strategy模式的不同

sensation 2003-02-27 04:04:07
在GoF的《设计模式》一书中,说的State和Strategy两种模式,但是我觉得这两个模式的类图完全一样,而且意图也差不多,曾经有人说过,理解设计模式,就是要理解它的意图,否则所有的模式都象Bridge,但是从意图的角度去看这两个模式,我还是不能分辩出来!
请高手指条路吧!
...全文
147 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lvkai 2003-03-03
  • 打赏
  • 举报
回复
说得非常透彻

我觉得这个论坛有了jeffyan77真是幸运
jeffyan77 2003-03-01
  • 打赏
  • 举报
回复
前面只是抄了抄(我自己的)书而已。

设计模式仅仅是一些典型例子而已,如果有特定的软件需求,完全可以根据具体情况进行自己的设计,而不必非要实现某个设计模式。

如果状态经常变化,那么就很难使用真正的策略模式。策略模式需要自行决定使用哪一个具体策略对象,而对客户端隐藏这一决定。如果一定要使用策略模式,那么环境对象的状态转移都不能自己做出决定,而需要在另一个对象(策略)里面做出决定,这难道不奇怪吗?如果真的这样做了,就把客户端的状态管理了起来,这不就是状态模式吗?

另一方面,如果不这样,而采用由客户端决定使用哪个策略对象,而且这个选择经常需要变化,这在本质上就变成了状态模式。

总而言之,只要状态有变化,而且管理这些状态的变化,最后就避免不了在某种程度上实现状态模式。要么你实现一个漂亮的,要么你实现一个蹩脚的。
whoke 2003-02-28
  • 打赏
  • 举报
回复
state模式在做自转换时,要知道其他state类的信息;
若在外部转换,要通过明确的状态转换;
strage则不用考虑外部状态问题和其他派生类的问题
sensation 2003-02-28
  • 打赏
  • 举报
回复
我觉得楼上的说得太好了!
那我反过来考虑,如果是环境角色经常变化的情况下,我使用Strategy模式,它的缺点在哪里呢?
jeffyan77 2003-02-28
  • 打赏
  • 举报
回复
状态模式与策略模式的区别

状态模式经常与策略模式相混淆。有的时候很难区分应当使用状态模式还是应当使用策略模式。

这个时候,一个简单的方法便是考察环境角色是否有明显的状态和状态的过渡。如果环境角色只有一个状态,那么就应当使用策略模式。策略模式的特点是一旦环境角色选择了一个具体策略类,那么在整个环境类的生命周期里它都不会改变这个具体策略类。而状态模式泽适用于另一种情况,即环境角色有明显的状态转移。在环境类的生命周期里面,会有几个不同的状态对象被使用。

另一个微妙的区别在于,策略模式的环境类自己选择一个具体策略类;而状态模式的环境类是被外在原因放进一个具体状态中。

策略模式所选的策略往往并不明显地告诉客户端它所选择的具体策略;而状态模式则相反,在状态模式里面,环境角色所处的状态是明显告诉给客户端的

50,545

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧