状态模式实现酒店订房系统
时间: 2023-11-01 14:07:41 浏览: 47
状态模式是一种行为设计模式,它允许一个对象在内部状态改变时改变其行为。在酒店订房系统中,我们可以使用状态模式来实现不同状态下的行为,例如预订房间、取消预订、入住、退房等。以下是状态模式实现酒店订房系统的示例代码:
```python
# 抽象状态类
class State:
def book_room(self):
pass
def cancel_room(self):
pass
def check_in(self):
pass
def check_out(self):
pass
# 具体状态类:空房间状态
class VacancyState(State):
def book_room(self):
print("房间已被预订!")
def cancel_room(self):
print("房间未被预订,无法取消预订!")
def check_in(self):
print("入住成功!")
return OccupiedState()
def check_out(self):
print("房间未被预订,无法退房!")
# 具体状态类:已入住状态
class OccupiedState(State):
def book_room(self):
print("房间已被预订!")
def cancel_room(self):
print("取消预订成功!")
return VacancyState()
def check_in(self):
print("房间已被入住,无法再次入住!")
def check_out(self):
print("退房成功!")
return VacancyState()
# 上下文类:酒店房间
class HotelRoom:
def __init__(self):
self.state = VacancyState()
def book_room(self):
self.state = self.state.book_room()
def cancel_room(self):
self.state = self.state.cancel_room()
def check_in(self):
self.state = self.state.check_in()
def check_out(self):
self.state = self.state.check_out()
# 客户端代码
room = HotelRoom()
room.book_room() # 房间已被预订!
room.check_in() # 入住成功!
room.check_in() # 房间已被入住,无法再次入住!
room.check_out() # 退房成功!
room.check_out() # 房间未被预订,无法退房!
room.cancel_room() # 取消预订成功!
room.cancel_room() # 房间未被预订,无法取消预订!
```
在上述代码中,我们定义了一个抽象状态类 State 和两个具体状态类 VacancyState 和 OccupiedState。具体状态类实现了抽象状态类定义的方法,同时也可以转换状态。然后,我们定义了一个上下文类 HotelRoom,它包含一个状态对象,并提供了一组接口,用于修改状态。最后,我们使用客户端代码来模拟用户对酒店房间的操作。