意图:允许对象在内部状态发生改变时改变它的行为,对象看起来好像修改了它的类。
实现
1.创建接口类
public interface State {
void doSomething(Mp3 mp3);
}
2.创建具体的状态类
public class StartState implements State{
@Override
public void doSomething(Mp3 mp3) {
if (!mp3.isPlaying()){
mp3.start();
}
System.out.println("Start");
}
}
public class StopState implements State{
@Override
public void doSomething(Mp3 mp3) {
if (mp3.isPlaying()){
mp3.stop();
}
System.out.println("Stop");
}
}
3.创建具体的设备和状态进行关联
public class Mp3 {
State state;
boolean isPlaying = false;
public State getState() {
return state;
}
public void setState(State state) {
this.state = state;
}
public void start(){
System.out.println("mp3 start");
isPlaying = true;
}
public void stop(){
System.out.println("mp3 stop");
isPlaying = false;
}
public boolean isPlaying(){
return isPlaying;
}
}
4.客户端调用
Mp3 mp3 = new Mp3();
State state = new StartState();
mp3.setState(state);
state.doSomething(mp3);
State stop = new StopState();
mp3.setState(stop);
stop.doSomething(mp3);