状态模式
:当一个对象内在状态改变时允许其改变行为,这个对象看起来像改变了其类。
对有状态的对象,把复杂的“判断逻辑”提取到不同的状态对象中,允许状态对象在其内部状态发生改变时改变其行为。
灯又两种状态,开和关,我们把灯定义成一个接口,
interface Lamp{
void on();
void off();
}
对应灯的两种不同的状态,创建两个实现类
开灯状态下的实现类
/**
* 开灯的状态下,只能执行关灯的操作
*/
class Lamp_on implements Lamp{
@Override
public void on() {
// System.out.println("");
}
@Override
public void off() {
System.out.println("执行了关灯操作!");
}
}
关灯状态下的实现类
/**
* 关灯的状态啊下只能执行开灯的操作
*/
class Lamp_off implements Lamp{
@Override
public void on() {
System.out.println("执行了开灯的操作!");
}
@Override
public void off() {
}
}
创建我们真正能够使用的灯的实现类
class LampUse implements Lamp{
private Lamp_on lamp_on = new Lamp_on();
private Lamp_off lamp_off = new Lamp_off();
private Lamp lamp;
public LampUse(Lamp lamp) {
this.lamp = lamp;
}
@Override
public void on() {
lamp.on();
lamp=lamp_on;
}
@Override
public void off() {
lamp.off();
lamp=lamp_off;
}
}
测试状态模式
public class Test05 {
public static void main(String[] args) {
LampUse use = new LampUse(new Lamp_off());
use.on();
use.on();
use.on();
use.off();
use.off();
use.off();
use.off();
}
}
可以看到,我们开灯和关灯状态下执行开灯和关灯的操作对应的方法是不一样的,这就是状态模式。