Java状态模式是常用的Java设计模式,下面我重点详解Java状态模式的角色实现与应用场景@mikechen
Java状态模式定义
Java状态模式是一种行为型设计模式,它允许一个对象在其内部状态发生改变时改变它的行为。
Java状态模式应用场景
Java 状态模式常常应用于以下场景中:
1.对象在不同状态下具有不同的行为
例如:一个订单在不同状态下,需要执行不同的处理逻辑,例如:待付款、待发货、已发货等场景,就比较适合Java状态模式。
2.一个对象的状态可以在运行时动态切换
例如:一个电视机的状态可以是开启、关闭、静音等,每个状态都对应一组固定的行为,例如:开启状态下可以调整音量、切换频道等。
3.对象的行为具有状态依赖性
例如:一个线程在不同的状态下,需要执行不同的操作。例如:新建状态下需要调用 start() 方法启动线程,终止状态下需要调用 stop() 方法停止线程等。
Java状态模式组件角色
Java状态模式类图实现,主要包含以下主要角色:
1.环境(Context)
环境角色通常包含:一个或多个状态角色,可以通过调用状态角色的方法来改变环境的状态和执行相应的操作。
2.抽象状态(State)
抽象状态是一个接口或抽象类,抽象状态通常包含一个或多个方法,用于处理当前状态下的行为。
3.具体状态(Concrete State)
具体状态是抽象状态的实现,具体状态可以在环境的运行时动态切换,从而改变环境的行为。
Java状态模式实现例子
下面是一个简单的 Java 状态模式的示例,包含上述三种角色:
// 抽象状态 public interface State { void handle(Context context); } // 具体状态1 public class ConcreteState1 implements State { @Override public void handle(Context context) { // 处理具体状态1的行为 System.out.println("Handling in ConcreteState1"); // 切换到具体状态2 context.setState(new ConcreteState2()); } } // 具体状态2 public class ConcreteState2 implements State { @Override public void handle(Context context) { // 处理具体状态2的行为 System.out.println("Handling in ConcreteState2"); // 切换到具体状态1 context.setState(new ConcreteState1()); } } // 环境 public class Context { private State state; public Context() { state = new ConcreteState1(); // 初始状态为具体状态1 } public void setState(State state) { this.state = state; } public void request() { state.handle(this); // 根据当前状态执行相应的操作 } } // 客户端代码 public class Client { public static void main(String[] args) { Context context = new Context(); context.request(); // Output: Handling in ConcreteState1 context.request(); // Output: Handling in ConcreteState2 context.request(); // Output: Handling in ConcreteState1 } }
在上面的示例中:
- State 是抽象状态,定义了具体状态所需实现的 handle 方法;
- ConcreteState1 和 ConcreteState2 是具体状态,实现了 State 接口,并根据当前状态执行相应的操作;
- Context 是环境角色,包含一个状态成员变量,用于存储当前状态,并根据状态执行相应的操作;
以上就是Java状态模式详解,更多内容请查看:Java设计模式:23种设计模式(万字图文全面总结)
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》