允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。
- // 状态接口
- interface State {
- void handle();
- }
-
- // 具体状态子类A
- class ConcreteStateA implements State {
- @Override
- public void handle() {
- System.out.println("Handling state A");
- }
- }
-
- // 具体状态子类B
- class ConcreteStateB implements State {
- @Override
- public void handle() {
- System.out.println("Handling state B");
- }
- }
-
- // 上下文类
- class Context {
- private State currentState;
-
- public Context() {
- // 初始状态为A
- currentState = new ConcreteStateA();
- }
-
- public void setState(State state) {
- this.currentState = state;
- }
-
- public void request() {
- currentState.handle();
- }
- }
-
- // 测试
- public class StatePatternExample {
- public static void main(String[] args) {
- Context context = new Context();
-
- // 初始状态为A
- context.request();
-
- // 改变状态为B
- context.setState(new ConcreteStateB());
- context.request();
- }
- }
在这个示例中,State接口定义了状态的行为,ConcreteStateA和ConcreteStateB是具体状态子类,分别实现了不同状态下的行为。Context类维护了一个当前状态的实例,根据当前状态来调用相应的行为。在测试中,创建了一个Context对象并初始化为状态A,然后改变状态为B并调用请求方法,观察输出结果。