【行为型模式】状态模式

生活中,最使人疲惫的往往不是道路的遥远,而是心中的郁闷;最使人痛苦的往往不是生活的不幸,而是希望的破灭;最使人颓废的往往不是前途的坎坷,而是自信的丧失;最使人绝望的往往不是挫折的打击,而是心灵的死亡。所以我们要有自己的梦想,让梦想的星光指引着我们走出落漠,走出惆怅,带着我们走进自己的理想。

导读:本篇文章讲解 【行为型模式】状态模式,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

基本要点

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/136803.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!