状态模式
1、定义
许一个对象的内部状态改变时改变它的行为。
2、结构图
Light :环境,也称为上下文,用来定义客户感兴趣的接口,同时维护一个具体处理当前状态的实例对象。
LightState:状态接口,用来封装与上下文的一个特定状态所对应的行为。
On/OffState:具体实现状态的处理类,每个实现一个跟上下文相关联的状态的具体处理。
3、代码
(1)light类
public class Light {
public Light(LightState state) {
super();
this.state = state;
}
private LightState state;
public void pressSwitch(){
state.pressSwitch(this);
}
public LightState getState() {
return state;
}
public void setState(LightState state) {
this.state = state;
}
}
(2)状态抽象类
/**
* 灯的状态
* @author qiang
*
*/
public abstract class LightState {
public abstract void pressSwitch(Light light);
}
(3)开启状态
/**
* 灯开启状态
* @author qiang
*
*/
public class OnState extends LightState {
/**
*
*/
@Override
public void pressSwitch(Light light) {
System.out.println("当前状态为on");
light.setState(new OffState());
}
}
(4)灯关闭状态
/**
* 灯关闭状态
* @author qiang
*
*/
public class OffState extends LightState {
@Override
public void pressSwitch(Light light) {
System.out.println("当前状态为off");
light.setState(new OnState());
}
}
(5)客户端
public class Client {
public static void main(String[] args) {
LightState state = new OnState();
Light light = new Light(state);
light.pressSwitch();
light.pressSwitch();
light.pressSwitch();
light.pressSwitch();
}
}
(6)运行结果
当前状态为on
当前状态为off
当前状态为on
当前状态为off