设计模式之状态模式

xiaoxiao2021-02-28  128

概述:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新

角色:

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(); //预订 } }

打印: 现在是空闲状态,我预定了 现在是预定状态,我入住了 现在是入住昨状态,我退房了

转载请注明原文地址: https://www.6miu.com/read-24033.html

最新回复(0)