【行为型模式】状态模式

基本要点

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());
    }
}

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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值