java-NIO之API(3)- GoF之状态模式

2020-09-26  本文已影响0人  卡门001

GoF-状态模式(State pattern)

状态模式定义

所谓的状态模式,指的是对于同一个对象而言,不同的状态对应着不同的行为,同时,这些状态和行为之间是可以转化的,由一个状态转向另外的一个状态。

比如交通红绿灯的三个状态,同一个对象对应着不同的状态,不同的状态又表示的是不同的行为:

本质

根据状态来分离和选择行为。

结构

示例

酒店系统中,房间的状态变化:

房间的状态与行为

代码

接口类 State
/**
 * 状态接口,封装与Context的一个特定状态相关的行为
 */
public interface State {
    /**
     * 状态对象的处理
     * @param sampleParameter 示例参数,说明可以传入什么样的参数、传入几个由具体应用具体分析
     */
    void handle();
}
实现类-房间空闲状态 FreeState
/**
 * 实现一个与Context的一个特定状态相关的行为 
 * 房间空闲状态
 *
 */
public class FreeState implements State {

    @Override
    public void handle() {
        //实现具体的处理(下同)
        System.out.println("房间空闲,可以预定!");
    }
}
实现类-房间预定状态 BookedState
/**
 *  房间预定状态
 */
public class BookedState implements State {
    @Override
    public void handle() {
    System.out.println("房间已预订,可以入住!");
    }
}
实现类-房间已入住状态 CheckedInState
/**
 * 房间已入住状态
 */
public class CheckedInState implements State {

    @Override
    public void handle() {
        System.out.println("房间已入住,不能预定!");
    }
}

测试

/**
 * 测试状态模式
 * @author CL
 *
 */
public class Client {

    public static void main(String[] args) {
        HomeContext hc = new HomeContext();

        //修改为空闲状态
        hc.setState(new FreeState());

        //修改为已预订状态
        hc.setState(new BookedState());

        //修改为已入住状态
        hc.setState(new CheckedInState());
    }
}

控制台输出

修改状态:房间空闲,可以预定!
修改状态:房间已预订,可以入住!
修改状态:房间已入住,不能预定!

参考
https://www.jianshu.com/p/4ad18e646d15
https://www.cnblogs.com/cao-lei/p/8334305.html

上一篇 下一篇

猜你喜欢

热点阅读