java 状态模式实现酒店订房系统
时间: 2023-11-01 11:07:41 浏览: 92
状态模式是一种行为设计模式,它允许一个对象在内部状态改变时改变其行为。在酒店订房系统中,我们可以使用状态模式来实现不同状态下的行为,例如预订房间、取消预订、入住、退房等。以下是状态模式实现酒店订房系统的示例代码:
```java
// 抽象状态类
interface State {
void bookRoom(HotelRoom room);
void cancelRoom(HotelRoom room);
void checkIn(HotelRoom room);
void checkOut(HotelRoom room);
}
// 具体状态类:空房间状态
class VacancyState implements State {
public void bookRoom(HotelRoom room) {
System.out.println("房间已被预订!");
room.setState(new OccupiedState());
}
public void cancelRoom(HotelRoom room) {
System.out.println("房间未被预订,无法取消预订!");
}
public void checkIn(HotelRoom room) {
System.out.println("入住成功!");
room.setState(new OccupiedState());
}
public void checkOut(HotelRoom room) {
System.out.println("房间未被预订,无法退房!");
}
}
// 具体状态类:已入住状态
class OccupiedState implements State {
public void bookRoom(HotelRoom room) {
System.out.println("房间已被预订!");
}
public void cancelRoom(HotelRoom room) {
System.out.println("取消预订成功!");
room.setState(new VacancyState());
}
public void checkIn(HotelRoom room) {
System.out.println("房间已被入住,无法再次入住!");
}
public void checkOut(HotelRoom room) {
System.out.println("退房成功!");
room.setState(new VacancyState());
}
}
// 上下文类:酒店房间
class HotelRoom {
private State state;
public HotelRoom() {
this.state = new VacancyState();
}
public void setState(State state) {
this.state = state;
}
public void bookRoom() {
this.state.bookRoom(this);
}
public void cancelRoom() {
this.state.cancelRoom(this);
}
public void checkIn() {
this.state.checkIn(this);
}
public void checkOut() {
this.state.checkOut(this);
}
}
// 客户端代码
public class Client {
public static void main(String[] args) {
HotelRoom room = new HotelRoom();
room.bookRoom(); // 房间已被预订!
room.checkIn(); // 入住成功!
room.checkIn(); // 房间已被入住,无法再次入住!
room.checkOut(); // 退房成功!
room.checkOut(); // 房间未被预订,无法退房!
room.cancelRoom(); // 取消预订成功!
room.cancelRoom(); // 房间未被预订,无法取消预订!
}
}
```
在上述代码中,我们定义了一个抽象状态类 State 和两个具体状态类 VacancyState 和 OccupiedState。具体状态类实现了抽象状态类定义的方法,同时也可以转换状态。然后,我们定义了一个上下文类 HotelRoom,它包含一个状态对象,并提供了一组接口,用于修改状态。最后,我们使用客户端代码来模拟用户对酒店房间的操作。
阅读全文