核心
- 用于解决系统中复杂对象的状态转换以及不同状态下行为的封装问题
结构
-
环境类(Context):
- 环境类中维护一个State对象,它定义了当前的状态,并委托当前状态处理一些请求;
-
抽象状态类(State):
- 用于封装对象的一个特定状态所对应的行为;
-
具体状态类(ConcreteState):
- 实现了抽象状态类,每个具体状态封装了各自状态对应的行为;
场景
-
电梯的运行
- 维修、正常、自动关门、自动开门、向上运行、向下运行、消防状态
-
红绿灯
- 红灯、黄灯、绿灯
- 请假审批
-
企业或政府系统
- 公文的审批
-
网购订单状态
- 下单
- 已付款
- 已发货
- 发货中
- 已收货
开发中常见的场景
- 银行系统中账号状态的管理
- OA系统中公文状态的管理
- 酒店系统中,房间状态的管理
- 线程对象各状态之间的切换
举例代码实现
-
场景:酒店系统中房间的状态变化:
- 已预定: 已预订状态可以入住,入住后就变成已入住状态;也可以取消预订,取消预订后就变成空闲状态;
- 已入住: 已入住状态可以退房,退房后变成空闲状态;
- 空闲: 空闲状态可以预订,预订后变成预订状态;也可以入住,入住后变成已入住状态;
-
代码实现
-
抽象状态类(State)文章来源:https://www.toymoban.com/news/detail-845402.html
/**
* 抽象房间状态 接口
*/
public interface State {
void handle();
}
- 具体状态类(ConcreteState)
/**
* 空闲状态
*/
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 CheckedInState implements State{
@Override
public void handle() {
System.out.println("房间已入住,请勿打扰。。。。。");
}
}
- 环境类(Context)
/**
* 环境类:
* 房间对象,持有状态的引用
*/
public class HomeContext {
private State state;
/**
* 设置状态。。
* @param state
*/
public void setState(State state){
System.out.println("修改状态。。");
this.state=state;
this.state.handle();
}
}
- 客户端调用
public static void main(String[] args) {
HomeContext hc=new HomeContext();
hc.setState(new FreeState());
hc.setState(new BookedState());
hc.setState(new CheckedInState());
}
更多设计模式学习:
设计模式(1):介绍
设计模式(2):单例模式
设计模式(3):工厂模式
设计模式(4):建造者模式
设计模式(5):原型模式
设计模式(6):桥接模式
设计模式(7):装饰器模式
设计模式(8):组合模式
设计模式(9):外观模式
设计模式(10):享元模式
设计模式(11):适配器模式
设计模式(12):代理模式
设计模式(13):模板方法模式
设计模式(14):命令模式
设计模式(15):迭代器模式
设计模式(16):观察者模式
设计模式(17):中介者模式
设计模式持续更新中…文章来源地址https://www.toymoban.com/news/detail-845402.html
到了这里,关于设计模式(18):状态模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!