public interface State {
/**
* 下一个频道
*/
void nextChannel();
/**
* 上一个频道
*/
void preChannel();
/**
* 调高音量
*/
void turnUp();
/**
* 调低音量
*/
void turnDown();
}
/**
* 关机状态
*/
public class PowerOffState implements State {
@Override
public void nextChannel() {
}
@Override
public void preChannel() {
}
@Override
public void turnUp() {
}
@Override
public void turnDown() {
}
}
/**
* 开机状态
*/
public class PowerOnState implements State {
@Override
public void nextChannel() {
System.out.println("下一个频道");
}
@Override
public void preChannel() {
System.out.println("上一个频道");
}
@Override
public void turnUp() {
System.out.println("调高音量");
}
@Override
public void turnDown() {
System.out.println("调低音量");
}
}
public interface PowerController {
/**
* 开机
*/
void powerOn();
/**
* 关机
*/
void powerOff();
}
public class PowerControllerImp implements PowerController {
private State state;
public void setState(State state) {
this.state = state;
}
@Override
public void powerOn() {
setState(new PowerOnState());
System.out.println("开机啦");
}
@Override
public void powerOff() {
setState(new PowerOffState());
System.out.println("关机啦");
}
public void nextChannel() {
state.nextChannel();
}
public void preChannel() {
state.preChannel();
}
public void turnUp() {
state.turnUp();
}
public void turnDown() {
state.turnDown();
}
}
public static void main(String[] args) {
PowerControllerImp powerController = new PowerControllerImp();
powerController.powerOn();
powerController.nextChannel();
powerController.powerOff();
powerController.turnDown();
}
状态模式和策略模式的结构几乎完成一样,但它们的目的,本质却完全不一样。
状态模式是平行的,不可替换的,策略模式是彼此独立的,可互相替换。
状态模式把对象的行为包装在不同的状态对象里,每一个对象都对应一个共同的对象状态基类。对象模式的意图是让一个对象
在其内部状态改变的时候,其行为也会随之改变。