Posted on 2007-03-06 23:03
webabcd 阅读(4481)
评论(16) 编辑 收藏
Feedback
StateChangeCheck方法在XmlMessage和SqlMessage两个state类中实现好象有些不妥吧,如果有多个状态并且初始状态由外部传入参数决定的话,每个state中的StateChangeCheck方法又都是if...else...了,丝毫没有起到state模式应起的作用
@Evanz
我觉得状态模式解决的不是“初始状态由外部传入参数决定”
它的作用是在对象内部改变“状态”
有的时候if...else...是避免不了的
是呀 if else 不是什么时候都要与其它解耦的 设计模式虽然给我们带来很多解决问题的方法,但如果滥用设计模式也带给我们许多不必要的麻烦。所以思想才是设计的灵魂!!!!!
public override void StateChangeCheck()
{
// 如果UserId是admin则变换状态为SqlMessage
if (this._message.UserId == "admin")
{
this._message.AbstractMessageState = new SqlMessage(this._message);
}
}
觉得你的不对。本来就是为了避免if else 等情况,你的例子中还不如用工厂模式呢。
@士大夫似的
我是想通过实例的方式来说明一下,并不是说这样的需求就要用这样的模式
谁说的状态模式就是为了避免if else?
它的作用是允许一个对象在其内部状态改变时改变它的行为。
--引用--------------------------------------------------
Evanz: StateChangeCheck方法在XmlMessage和SqlMessage两个state类中实现好象有些不妥吧,如果有多个状态并且初始状态由外部传入参数决定的话,每个state中的StateChangeCheck方法又都是if...else...了,丝毫没有起到state模式应起的作用
--------------------------------------------------------
--引用--------------------------------------------------
士大夫似的: public override void StateChangeCheck()
{
// 如果UserId是admin则变换状态为SqlMessage
if (this._message.UserId == "admin")
{
this._message.AbstractMessageState = new SqlMessage(this._message);
}
}
觉得你的不对。本来就是为了避免if else 等情况,你的例子中还不如用工厂模式呢。
--------------------------------------------------------
同意
@ve
:)
我写这些设计模式的用意是从代码的角度介绍如何使用设计模式
另外,我的观点是State Pattern并不是为了避免if...else...的出现
它的作用就是一句话:“允许一个对象在其内部状态改变时改变它的行为”
同意 士大夫似的
楼主说的是没错
但是设计模式还有一个作用就是增强代码可读性
@staticage
:)
我觉得设计模式就是为了可扩展性,代码复用
为了oo的几个原则
至于可读性的话,我想过程化的开发的可读性更强