网站建设求职,购物系统数据库设计,互联网推广运营是做什么的,织梦dedecms网站简略标题shorttitle的使用方法核心
用于解决系统中复杂对象的状态转换以及不同状态下行为的封装问题
结构
环境类(Context): 环境类中维护一个State对象#xff0c;它定义了当前的状态#xff0c;并委托当前状态处理一些请求#xff1b; 抽象状态类(State): 用于封装对象的一个特定状态所对应的行为它定义了当前的状态并委托当前状态处理一些请求 抽象状态类(State): 用于封装对象的一个特定状态所对应的行为 具体状态类(ConcreteState): 实现了抽象状态类每个具体状态封装了各自状态对应的行为
场景
电梯的运行 维修、正常、自动关门、自动开门、向上运行、向下运行、消防状态 红绿灯 红灯、黄灯、绿灯 请假审批企业或政府系统 公文的审批 网购订单状态 下单已付款已发货发货中已收货
开发中常见的场景
银行系统中账号状态的管理OA系统中公文状态的管理酒店系统中房间状态的管理线程对象各状态之间的切换
举例代码实现 场景酒店系统中房间的状态变化 已预定 已预订状态可以入住入住后就变成已入住状态也可以取消预订取消预订后就变成空闲状态已入住 已入住状态可以退房退房后变成空闲状态空闲 空闲状态可以预订预订后变成预订状态也可以入住入住后变成已入住状态 代码实现 抽象状态类(State)
/*** 抽象房间状态 接口*/
public interface State {void handle();
}具体状态类(ConcreteState)
/*** 空闲状态*/
public class FreeState implements State{Overridepublic void handle() {System.out.println(房间空闲中,可预订。。。。。);}
}
/*** 已预定状态*/
public class BookedState implements State{Overridepublic void handle() {System.out.println(房间已预订。。。。。);}
}
/*** 已入住状态*/
public class CheckedInState implements State{Overridepublic void handle() {System.out.println(房间已入住请勿打扰。。。。。);}
}环境类(Context)
/*** 环境类:* 房间对象,持有状态的引用*/
public class HomeContext {private State state;/*** 设置状态。。* param state*/public void setState(State state){System.out.println(修改状态。。);this.statestate;this.state.handle(); }
}客户端调用
public static void main(String[] args) {HomeContext hcnew 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)中介者模式 设计模式持续更新中…