public class Girl
{
//代表心情好
private static int STATE_ORDINARY = 0;
//代表心情坏
private static int STATE_IN_BAD_MOOD = 1;
//心情状态,初期为-1
private int state = -1;
//改变心情状态
public void changeState(int state)
{
this.state = state;
}
//对邀请看电影的后的反应动作。
public string invite()
{
if (state == STATE_ORDINARY)
{
return "好呀";
} else if (state == STATE_IN_BAD_MOOD)
{
return "讨厌";
} else
{
return "...";
}
}
有一天女孩喜欢上你了,状态的改变,反应又不一样了。心情好的时候,会说:太高兴了。不好的时候会说:我们去喝咖啡吧。如果用上面的代码,就要修改invite动作的if else ,修改类内部代码显然是我们不希望的。这是为什么要引进状态设计模式的原因。
//状态设计模式下的Girl类
public class StatePatternGirl
{
private State state = null;
private void changeState(State state)
{
this.state = state;
}
public string invite()
{
return this.state.invite();
}
}
//状态的接口,动作在具体状态类中实现。
interface State
{
public string invite();
}
class BadMoodState : State
{
public string invite()
{
return "去喝咖啡吧";
}
}
class OrdinaryState : State
{
public string morningGreet()
{
return "好高兴呀";
}
}
这样,既可以修改状态的动作,又可以保持StatePatternGirl 这个类的一致,这就是状态设计模式。
没有评论:
发表评论