设计模式梳理——状态模式
程序员文章站
2022-06-17 17:09:12
...
一、概述
状态模式(State),当一个对象的内在状态发生改变时允许改变其行为,这个对象看起来像是改变了其类。
状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂的情况。把状态的判断逻辑转移到表示不同状态的一些类中,可以把复杂的判断逻辑简化。
二、UML图示
三、代码实现
1、state类
public abstract class State {
public abstract void handle(Context context);
}
2、context类
public class Context {
private State state;
/**
* 定义初始状态
* @param state
*/
public Context(State state) {
this.state = state;
}
public State getState() {
return state;
}
public void setState(State state) {
this.state = state;
}
/**
* 对请求作处理,并设置下一个状态
*/
public void request(){
state.handle(this);
}
}
3、state子类A
public class ConcreteStateA extends State {
@Override
public void handle(Context context) {
System.out.println("状态改变为:A");
context.setState(new ConcreteStateB());
}
}
4、state子类B
public class ConcreteStateB extends State {
@Override
public void handle(Context context) {
System.out.println("状态改变为:B");
context.setState(new ConcreteStateA());
}
}
5、测试类
public class Test {
public static void main(String[] args) {
//设置初始状态为A
Context context = new Context(new ConcreteStateA());
context.request();
context.request();
context.request();
context.request();
context.request();
context.request();
}
}
输出:
状态改变为:A
状态改变为:B
状态改变为:A
状态改变为:B
状态改变为:A
状态改变为:B
注:参考文献《大话设计模式》程杰著。
上一篇: springboot2.2.X手册:分布式系统下,重复提交的解决方案
下一篇: 设计模式——状态模式