23种设计模式之状态模式
2018-01-27 08:37
363 查看
场景
电梯的运行
维修、正常、自动关门、自动开门、向上运行、向下运行、消防状态。
红绿灯
红灯、黄灯、绿灯
网上购物时,订单的状态
下单
已付款
已发货
送货中
已收货
核心:用于解决系统中复杂对象状态转换以及不同状态下行为的封装问题。
结构:
Context环境类
环境类中维护一个State对象,他是定义来了当前的状态。
State抽象状态类
ConcreteState具体状态类
每一个类封装了一个状态对应的行为。
举例:我们都知道宾馆有三种情况,空闲,已预订,已入住。
定义房间的状态接口
空闲状态
已预订状态
房间已入住
Context环境变量
测试
电梯的运行
维修、正常、自动关门、自动开门、向上运行、向下运行、消防状态。
红绿灯
红灯、黄灯、绿灯
网上购物时,订单的状态
下单
已付款
已发货
送货中
已收货
核心:用于解决系统中复杂对象状态转换以及不同状态下行为的封装问题。
结构:
Context环境类
环境类中维护一个State对象,他是定义来了当前的状态。
State抽象状态类
ConcreteState具体状态类
每一个类封装了一个状态对应的行为。
举例:我们都知道宾馆有三种情况,空闲,已预订,已入住。
定义房间的状态接口
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 CheckedInState implements State { @Override public void handle() { System.out.println("房间已入住!请勿打扰!"); } }
Context环境变量
public class HomeContext { State state; public void setState(State state) { System.out.println("修改房间状态"); this.state = state; state.handle(); } }
测试
HomeContext context = new HomeContext(); context.setState(new FreeState()); context.setState(new BookedState()); context.setState(new CheckedInState());
相关文章推荐
- 23种设计模式(14):状态模式
- 快速掌握23种设计模式(状态,策略,观察者)
- Java23种设计模式——状态模式
- 23种设计模式(22)java状态模式
- 23种设计模式(20)_行为型_状态者模式(State Pattern)
- 23种设计模式 之 State模式(状态模式)[C语言]
- GoF23种设计模式之行为型模式之状态模式
- 23种设计模式(20)-状态模式
- 23种设计模式(22)-状态模式
- GoF23种设计模式之行为型模式之状态模式
- GoF23种设计模式之行为型模式之状态模式
- 23种设计模式C++实例之状态模式
- 【Unity3D与23种设计模式】状态模式(State)
- 【行为型模式】状态模式(state)之23种java设计模式
- 23种设计模式之状态模式(State)
- Java 23种设计模式之状态模式
- JAVA开发的23种设计模式之 --- 状态模式
- 设计模式(二十四)------23种设计模式(16):状态模式
- 23种设计模式4--行为型模式(策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式)
- 23种设计模式4--行为型模式(策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式)