社区
Java
帖子详情
State模式和Strategy模式的不同
sensation
2003-02-27 04:04:07
在GoF的《设计模式》一书中,说的State和Strategy两种模式,但是我觉得这两个模式的类图完全一样,而且意图也差不多,曾经有人说过,理解设计模式,就是要理解它的意图,否则所有的模式都象Bridge,但是从意图的角度去看这两个模式,我还是不能分辩出来!
请高手指条路吧!
...全文
147
5
打赏
收藏
State模式和Strategy模式的不同
在GoF的《设计模式》一书中,说的State和Strategy两种模式,但是我觉得这两个模式的类图完全一样,而且意图也差不多,曾经有人说过,理解设计模式,就是要理解它的意图,否则所有的模式都象Bridge,但是从意图的角度去看这两个模式,我还是不能分辩出来! 请高手指条路吧!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
打赏
举报
回复
状态模式与策略模式的区别
状态模式经常与策略模式相混淆。有的时候很难区分应当使用状态模式还是应当使用策略模式。
这个时候,一个简单的方法便是考察环境角色是否有明显的状态和状态的过渡。如果环境角色只有一个状态,那么就应当使用策略模式。策略模式的特点是一旦环境角色选择了一个具体策略类,那么在整个环境类的生命周期里它都不会改变这个具体策略类。而状态模式泽适用于另一种情况,即环境角色有明显的状态转移。在环境类的生命周期里面,会有几个不同的状态对象被使用。
另一个微妙的区别在于,策略模式的环境类自己选择一个具体策略类;而状态模式的环境类是被外在原因放进一个具体状态中。
策略模式所选的策略往往并不明显地告诉客户端它所选择的具体策略;而状态模式则相反,在状态模式里面,环境角色所处的状态是明显告诉给客户端的
设计
模式
精解-GoF 23种设计
模式
解析
3.2
Strategy
模式
3.3
State
模式
3.4 Observer
模式
3.5 Memento
模式
3.6 Mediator
模式
3.7 Command
模式
3.8 Visitor
模式
3.9 Chain of Responsibility
模式
3.10 Iterator
模式
3.11 Interpreter
模式
4 说明
36种最新设计
模式
整理
State
模式
Strategy
模式
Template Method
模式
Visitor
模式
Guarded Suspension
模式
Producer Consumer
模式
Worker Thread
模式
Thread-Per-Message
模式
Future
模式
Read-Write-Lock
模式
...
区块链之Go语言设计
模式
建造
模式
:将产品的内部表象和产品的生成过程分割开来,从而使一个建造过程生成具有
不同
的内部表象的产品对象。建造
模式
使得产品内部表象可以独立的变化,客户不必知道产品内部组成的细节。建造
模式
可以强制实行一...
Java设计
模式
设计
模式
介绍
2、爪哇语言抽象工厂创立性
模式
介绍 3、工厂方法创立性
模式
介绍 4、单态创立性
模式
介绍 5、单态创立性
模式
介绍 6、观察者
模式
介绍7、责任链
模式
8、设计
模式
之Observer 9、设计
模式
之
Strategy
(策略) 10、设计
模式
之...
JAVA设计
模式
chm文档
创建
模式
: 设计
模式
之Factory 设计
模式
之Prototype(原型) 设计
模式
之Builder 设计
模式
之Singleton(单态) ...设计
模式
之
Strategy
(策略) 设计
模式
之Mediator(中介者) 设计
模式
之Interpreter(解释器) 设计
模式
之Visitor
Java
50,545
社区成员
85,621
社区内容
发帖
与我相关
我的任务
Java
Java相关技术讨论
复制链接
扫一扫
分享
社区描述
Java相关技术讨论
java
spring boot
spring cloud
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章