欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

设计模式——状态模式

程序员文章站 2022-03-14 20:45:15
...

状态模式:当一个对象的内在状态改变是允许改变其行为,这个对象看起来像是改变了其类;
主要解决的是当控制一个对象状态转换的条件表达式过于复杂的情况,把状态的判断逻辑转移到表示不同转改的一系列类当中,可以把复杂的判断逻辑简化。
类图:
设计模式——状态模式
由上图可以看出来状态类继承了同一个状态接口,包含一个处理当前状态的方法;context类中拥有一个state实例对象,保存了当前的状态。
下面我们用一个简单的示例类了解一下
state接口:

public interface State {
    void handle(Context context);
}

StateA 类:

public class StateA implements State{
    @Override
    public void handle(Context context) {
        //达到本状态的判断条件则进行本判断的操作
        System.out.println("this is state A handle");
        //达不到则将状态设置为下一个状态
        context.setState(new StateB());
    }
}

StateB类:

public class StateB implements State{
    @Override
    public void handle(Context context) {
        System.out.println("this is state B handle");
    }
}

Context 类:

public class Context {
    private State state;
    public Context(State state) {
        this.state = state;
    }
    public void setState(State state) {
        this.state = state;
    }
    public void request() {
        state.handle(this);
    }
}

Client 类:

import org.junit.Test;

public class Client {
    @Test
    public void stateTest() {
        State state = new StateA();
        Context context = new Context(state);
        context.request();
        context.request();
    }
}

由上可以看出我们需要直到各个类的判断条件,可以将复杂的条件判断和if—else嵌套分开,简化程序可读性