public interface State { public void bookRoom(); public void unsubscribeRoom(); public void checkInRoom(); public void checkOutRoom(); }
2 房间类Room(环境角色)
public class Room { private State freeTimeState; private State checkInState; private State bookedState;
private State state;
public Room() { freeTimeState = new FreeTimeState(this); checkInState = new CheckInState(this); bookedState = new BookedState(this); state = freeTimeState; }
public void bookRoom() { state.bookRoom(); } public void unsubscribeRoom() { state.unsubscribeRoom(); } public void checkInRoom() { state.checkInRoom(); } public void checkOutRoom() { state.checkOutRoom(); }
public String toString() { return "该房间的状态是:"+getState().getClass().getName(); }
public State getFreeTimeState() { return freeTimeState; }
public void setFreeTimeState(State freeTimeState) { this.freeTimeState = freeTimeState; }
public State getCheckInState() { return checkInState; }
public void setCheckInState(State checkInState) { this.checkInState = checkInState; }
public State getBookedState() { return bookedState; }
public void setBookedState(State bookedState) { this.bookedState = bookedState; }
public State getState() { return state; }
public void setState(State state) { this.state = state; } }
3 房间状态(具体状态角色)
空闲状态
public class FreeTimeState implements State { private Room hotelManagement;
public FreeTimeState(Room hotelManagement) { this.hotelManagement = hotelManagement; } @Override public void bookRoom() { System.out.println("您已经预定成功了!"); this.hotelManagement.setState(this.hotelManagement.getBookedState()); }
@Override public void unsubscribeRoom() { }
@Override public void checkInRoom() { System.out.println("您已经入住了!"); this.hotelManagement.setState(this.hotelManagement.getCheckInState()); }
@Override public void checkOutRoom() { } }
入住状态
public class CheckInState implements State { private Room hotelManagement;
public CheckInState(Room hotelManagement) { this.hotelManagement = hotelManagement; } @Override public void bookRoom() { System.out.println("该房间已经入住了"); }
@Override public void unsubscribeRoom() { }
@Override public void checkInRoom() { System.out.println("该房间已经入住了"); }
@Override public void checkOutRoom() { System.out.println("退房成功"); this.hotelManagement.setState(this.hotelManagement.getFreeTimeState()); } }
预订状态
public class BookedState implements State { private Room hotelManagement;
public BookedState(Room hotelManagement) { this.hotelManagement = hotelManagement; }
@Override public void bookRoom() { System.out.println("该房间已经预定了"); }
@Override public void unsubscribeRoom() { System.out.println("成功退订"); this.hotelManagement.setState(this.hotelManagement.getFreeTimeState()); }
@Override public void checkInRoom() { System.out.println("入住成功"); this.hotelManagement.setState(this.hotelManagement.getCheckInState()); }
@Override public void checkOutRoom() { } }
4 测试代码
Room[] rooms = new Room[2]; for(int i=0;i<rooms.length;i++) { rooms[i] = new Room(); }