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

抽象状态类
package com.lq.state;
/**
* @author lq
* @PACKAGE_NAME: com.lq.state
* @CLASS_NAME: State
* @date 2022/11/14 21:45
* @Description:
*/
public interface State {
/**
* 操控
*/
void handle();
}
具体状态类
public class BookedState implements State{
@Override
public void handle() {
System.out.println("房间已预订!别人不能定!");
}
}
class CheckedState implements State{
@Override
public void handle() {
System.out.println("房间已入住!请勿打扰!");
}
}
class FreeState implements State{
@Override
public void handle() {
System.out.println("房间空闲!!!没人住!");
}
}
环境类
/**
* @author lq
* @PACKAGE_NAME: com.lq.state
* @CLASS_NAME: HomeContext
* @date 2022/11/14 21:47
* @Description:
*/
public class HomeContext {
private State state;
public void setState(State s){
System.out.println("修改状态!");
state = s;
state.handle();
}
}
测试
/**
* @author lq
* @PACKAGE_NAME: com.lq.state
* @CLASS_NAME: Main
* @date 2022/11/14 21:47
* @Description:
*/
public class Main {
public static void main(String[] args) {
// 获取房间对象
HomeContext ctx = new HomeContext();
// 设置房间状态
ctx.setState(new FreeState());
ctx.setState(new BookedState());
}
}
输出
修改状态!
房间空闲!!!没人住!
修改状态!
房间已预订!别人不能定!