设计模式之状态模式
来源:互联网 发布:树莓派 php无法安装 编辑:程序博客网 时间:2024/06/06 19:34
概述:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新
角色:
- Context 定义客户感兴趣的接口。 维护一个ConcreteState子类的实例,这个实例定义当前状态
- State 定义一个接口以封装与Context的一个特定状态相关的行为
- ConcreteStatesubclasses 每一子类实现一个与Context的一个状态相关的行为
类图:
实现:
状态接口:
interface State { //订房 public void bookRoom(); //入住 public void checkInRoom(); //退房 public void checkOutRoom();}
状态的三个实现
/** * 空闲状态 * 能预定 */public class FreeTimeState implements State { Room room; public FreeTimeState(Room room){ this.room = room; } @Override public void bookRoom() { System.out.println("现在是空闲状态,我预定了"); room.setState(room.getBookedDState()); } @Override public void checkInRoom() { } @Override public void checkOutRoom() { }}
/** * 预定状态 * 能入住 */public class BookedState implements State { Room room; public BookedState(Room room){ this.room = room; } @Override public void bookRoom() { } @Override public void checkInRoom() { System.out.println("现在是预定状态,我入住了"); room.setState(room.getCheckInState()); } @Override public void checkOutRoom() { }}
/** * 入住状态 * 能退房 */public class CheckInState implements State { Room room; public CheckInState(Room room){ this.room = room; } @Override public void bookRoom() { } @Override public void checkInRoom() { } @Override public void checkOutRoom() { System.out.println("现在是入住昨状态,我退房了"); room.setState(room.getFreeTimeState()); }}
房间:
ublic class Room { State freeTimeState; State bookedDState; State checkInState; State state; public Room(){ freeTimeState = new FreeTimeState(this); bookedDState = new BookedState(this); checkInState = new CheckInState(this); state = freeTimeState; } /** * 预定 */ public void bookRoom() { state.bookRoom(); } /** * 入住 */ public void checkInRoom() { state.checkInRoom(); } /** * 退房 */ public void checkOutRoom() { state.checkOutRoom(); } public State getState() { return state; } public void setState(State state) { this.state = state; } public State getFreeTimeState() { return freeTimeState; } public void setFreeTimeState(State freeTimeState) { this.freeTimeState = freeTimeState; } public State getBookedDState() { return bookedDState; } public void setBookedDState(State bookedDState) { this.bookedDState = bookedDState; } public State getCheckInState() { return checkInState; } public void setCheckInState(State checkInState) { this.checkInState = checkInState; }}
测试:
public class testState { public static void main(String[] args) { Room room = new Room(); room.bookRoom(); //预订 room.checkInRoom(); //入住 room.checkOutRoom(); //预订 }}
打印:
现在是空闲状态,我预定了
现在是预定状态,我入住了
现在是入住昨状态,我退房了
0 0
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之--状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 【设计模式】之状态模式
- 机器学习笔记6——支持向量机
- 《将博客搬至CSDN》
- 可控硅设计经验总结
- Java finalize方法使用
- fragment hint show 方法 怎么刷新
- 设计模式之状态模式
- Java中finalize()用法
- 【MOOC】数字信号处理-电子科技大学-第四&五周
- Mybatis源码学习笔记(一) 搭建mybatis
- MySQL explain的参数详解
- 2.1 插入排序(insertion_sort)
- 射频RFID信号的攻防介绍
- 使用jmeter对websocket进行压力测试
- BZOJ 1475: 方格取数 最大点权独立集