设计模式(9):状态模式

341 阅读1分钟

状态模式

定义

在状态模式(State Pattern)中,类的行为是基于它的状态改变的。这种类型的设计模式属于行为型模式。在状态模式中,我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context 对象。

简单的说,就是类会根据传进来的状态不同而做出不同的操作。一般的思路是写if语句进行状态判断。而状态模式就是将状态和它对应的要进行的操作封装成一个状态类,而上层调用的时候时候就不需要进行状态判断了,直接调用传进来的状态类对应的方法即可。同时我们需要一个Context类来对状态进行管理(初始化状态,状态改变)

示例和代码

//定义状态接口,声明状态对应的执行方法
interface State {
    void doSomething();
}

//实现不同的状态
class HappyState {
    @override
    public void doSomething() {
        ...
    }
}

class AngryState {
    @override
    public void doSomething() {
        ...
    }
}

//定义Context类来管理state
class Context {
    private State state;
    public void changeState(State state) {
        this.state = state;
    }
    
    public void doSomething() {
        state.doSomething();
    }
}

//使用
public class Main {
    public static void main(String[] args) {
        Context ZhangSan = new Context();
        ZhangSan.changeState(new HappyState());
        ZhangSan.doSomething();
        
        ZhangSan.changState(new AngryState());
        ZhangSan.doSomething();
    }
}