结构
参与者
- Context(环境)
- 定义客户感兴趣的接口
- 维护一个ConcreteState子类的实例,这个实例定义当前状态。
- State(状态)
- 定义一个接口,以封装与Context的一个特定状态相关的行为
- ConcreteState subclasses(具体状态子类)
- 每个子类实现一个与Context的一个状态相关的行为
协作
- Context将与状态相关的请求委托给当前的ConcreteState对象处理
- Context可将自身作为一个参数传递给处理该请求的状态对象,这使得状态对象在必要的时候可以访问Context
- Context时客户使用的主要接口,客户可用状态来配置一个Context,一旦一个Context配置完毕,它的客户不再需要直接与状态对象打交道
示例代码
package abc;
interface State {
public void Handle();
}
class TVOnState implements State {
@Override
public void Handle() {
System.out.println("TV now is on ");
}
}
class TVOffState implements State {
@Override
public void Handle() {
System.out.println("TV now is off ");
}
}
class TVContext {
private State state;
public TVContext() {
state = null;
}
public void setState(State state) {
this.state = state;
}
public void request() {
state.Handle();
}
}
public class Client {
public static void main(String[] args) {
State stateon = new TVOnState();
State stateoff = new TVOffState();
TVContext TV = new TVContext();
TV.setState(stateon);
TV.request();
TV.setState(stateoff);
TV.request();
}
}
输出结果
TV now is on
TV now is off