状态模式(State): 当一个对象的内在状态改变时允许改变其行为,这个对象像是改变了其类。类的行为是基于它的状态改变的。这种类型的设计模式属于行为型模式。
场景: 状态模式主要解决当一个对象状态转换的条件表达式过于复杂时的情况,把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化。即行为随状态改变而改变的场景
类图:
代码实例:
public class Context {
private State state;
int progress;
boolean downloadSuccess;
public Context(State state) {
this.state = state;
}
public void setState(State state) {
this.state = state;
}
public void handle() {
state.handle(this);
}
}
public interface State {
void handle(Context context);
}
public class DownloadingState implements State {
@Override
public void handle(Context context) {
if (context.progress >= 100) {
context.setState(new DownloadSuccessState());
context.downloadSuccess = true;
context.handle();
} else {
System.out.println("downloading");
}
}
}
public class DownloadSuccessState implements State{
@Override
public void handle(Context context) {
if (context.downloadSuccess) {
System.out.println("download success");
context.setState(new InstallingState());
context.handle();
}
}
}
public class InstallingState implements State {
@Override
public void handle(Context context) {
System.out.println("installing...");
}
}
public class StateDemo {
public static void main(String[] args) {
Context context = new Context(new DownloadingState());
context.progress = 50;
context.handle();
context.progress = 100;
context.handle();
}
}
downloading
download success
installing...