设计模式-状态模式(state)

状态模式(state),当一个对象的内在状态改变时允许改变其行为,这个对象看起啦像是改变了其类。

状态模式主要解决的问题是当控制一个对象的状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化。如果这个状态判断很简单,就没必要使用状态模式了。

设计模式-状态模式(state)_第1张图片

State抽象状态类,定义一个接口以封装与context的一个特定状态相关的行为。

abstract class State{

public abstract void handle(Context context);

}

ConcreteState类,具体状态,每一个子类实现与Context的一个状态相关的行为。

class ConcreteStateA : State{

public override void handle(Context context){

context.state = new ConcreteStateB();//设置ConcreteStateA 的下一个状态的ConcreteStateB

}

}

class ConcreteStateB : State{

public override void handle(Context context){

context.state = new ConcreteStateC();//设置ConcreteStateB 的下一个状态的ConcreteStateC

}

}

Context类,维护一个concreteState子类的实例,这个实例定义当前的状态。

class Context{

private state;

public Context(State state){

this.state=state;//定义初始状态

}

public State state{可读写的状态属性,用于读取,设置当前状态

get {return state;}

set {state = value;}

}

public request(){对请求做处理并设置下一个状态

state.handle(this);

}

}

状态模式的好处,是将与特定状态相关的行为局部化,并且将不同状态的行为分割开来。

将特定的状态相关的行为都放入一个对象中,由于所有与状态相关的代码都存在于某个concretestate类中,通过定义新的子类可以很容易的增加新的状态和转换。这样的做的目的就是为了消除庞大的条件分支语句。

什么时候应该使用状态模式?当一个对象的行为取决于他的状态,并且他必须在运行时刻根据状态改变他的行为时,可以考虑使用状态模式。

你可能感兴趣的:(设计模式-状态模式(state))