状态模式的类图
我觉得在现实生活中,比较典型的状态模式就是红绿灯。
-
public class Test {
-
public static void main(String[] args) throws InterruptedException {
-
红绿灯 context = new 红绿灯();
-
context.beginWork();
-
}
-
}
-
-
class 红绿灯 {
-
private 指示灯 currentState = new 红灯();
-
-
public void beginWork() throws InterruptedException {
-
currentState.亮(this);
-
}
-
-
public void setCurrentState(指示灯 currentState) {
-
this.currentState = currentState;
-
}
-
-
}
-
-
interface 指示灯 {
-
void 亮(红绿灯 context) throws InterruptedException;
-
}
-
-
class 红灯 implements 指示灯 {
-
-
@Override
-
public void 亮(红绿灯 context) throws InterruptedException {
-
System.out.println("红灯点亮");
-
Thread.sleep(3000);
-
context.setCurrentState(new 绿灯());
-
context.beginWork();
-
}
-
-
}
-
-
class 黄灯 implements 指示灯 {
-
-
@Override
-
public void 亮(红绿灯 context) throws InterruptedException {
-
System.out.println("黄灯闪烁");
-
Thread.sleep(1000);
-
System.out.println("黄灯闪烁");
-
Thread.sleep(1000);
-
System.out.println("黄灯闪烁");
-
Thread.sleep(1000);
-
context.setCurrentState(new 红灯());
-
context.beginWork();
-
}
-
-
}
-
-
class 绿灯 implements 指示灯 {
-
-
@Override
-
public void 亮(红绿灯 context) throws InterruptedException {
-
System.out.println("绿灯点亮");
-
Thread.sleep(4000);
-
context.setCurrentState(new 黄灯());
-
context.beginWork();
-
}
-
-
}
结果:
红灯点亮
绿灯点亮
黄灯闪烁
黄灯闪烁
黄灯闪烁
红灯点亮
...
...
与责任链模式不同的是,状态模式在状态执行时,指定下一个状态的信息。
而责任链模式则在Client装配责任链。
相对来说,状态模式的状态转换是固定的,而责任链模式的请求路径,则可以在Client调用时,动态构建。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29254281/viewspace-1127079/
,如需转载,请注明出处,否则将追究法律责任。