其他分享
首页 > 其他分享> > 行为型模式----状态模式

行为型模式----状态模式

作者:互联网

基本要点

1、核心
用于解决系统中复杂对象的状态转换以及不同状态下行为的封装问题,例如酒店管理系统中房间状态、OA公文系统中公文状态以及对应状态需要执行的操作

2、结构
Context环境类:环境类中维护一个state对象,定义了当前的状态
State抽象状态类
ConcreteState具体状态类:每一个类封装了一个状态对应的行为

代码样例

我们举一个酒店房间状态的例子(空闲、预订和入住)
首先我们需要创建一个环境类来维护房间的状态

/**
 * 环境类,此处指房间对象
 */
public class HomeContext {
    // 环境类中维护一个state对象,定义了当前房间的状态
    private State state;

    // 提供一个方法修改state状态,并且执行对应状态下的方法
    public void setState(State state) {
        System.out.println("修改状态");
        this.state = state;
        state.handle();
    }
}

然后我们创建抽象状态类和对应的具体状态类
在具体状态类中创建此状态需要执行的方法

/**
 * 抽象状态类
 */
public interface State {
    void handle();
}

/**
 * 空闲状态
 */
public class FreeState implements State {
    @Override
    public void handle() {
        System.out.println("房间已空闲,可以预订");
    }
}

/**
 * 预订状态
 */
public class BookedState implements State {
    @Override
    public void handle() {
        System.out.println("房间已预订,等待入住");
    }
}

/**
 * 入住状态
 */
public class CheckInState implements State {
    @Override
    public void handle() {
        System.out.println("房间入住,无法预订");
    }
}

最后我们编写一个测试类进行测试,模拟房间从退房–>预订–>入住分别执行那些操作

public class Client {
    public static void main(String[] args) {
        HomeContext homeContext = new HomeContext();

        // 房间从退房-->预订-->入住依次需要修改如下状态和调用对应状态的方法
        homeContext.setState(new FreeState());
        homeContext.setState(new BookedState());
        homeContext.setState(new CheckInState());
    }
}

运行结果如下
在这里插入图片描述
如有错误,欢迎指正

标签:状态,void,房间,State,模式,----,state,public
来源: https://blog.csdn.net/Decade0712/article/details/121665322