某在线游戏支持多人联机对战,每个玩家都可以加入某一战队组成联盟,当战队中某一成员受到敌人攻击时将给所有明友发送通知,盟友收到通知后将做出响应。使用观察者模式设计题目要求的系统功能结构类图,并编程模拟实现该过程。
时间: 2024-12-11 07:37:47 浏览: 10
观察者模式是一种行为设计模式,它定义了对象之间的一对多依赖关系,当一个对象状态改变时,所有依赖它的对象都会得到通知并自动更新。在这个在线游戏中,我们可以把玩家、战队和消息通知系统作为主要的角色。
1. **类图**:
- **Player**: 玩家类,包含个人信息和所属战队的引用。当玩家角色被攻击时,会触发事件通知机制。
- **Team**: 战队类,维护一个观察者列表(例如,玩家集合),同时有事件通知的能力。
- **Observer (Notification)**: 观察者接口,包含接收事件通知的方法(如onAttackReceived)。
- **GameServer**: 游戏服务器,负责处理玩家之间的交互,并在检测到攻击行为时调用相应玩家的观察者接口。
类图大致可以这样表示:
```
+---------------------+
| Player |
+---------------------+
| - team: Team | // 玩家属于战队
| + onAttackReceived(Observer) | // 接受攻击通知
+---------------------+
+---------------------+
| Team |
+---------------------+
| - players: [Player] | // 战队成员集合
| - observers: Observer[] | // 观察者列表
| + notifyAttacked(Player) | // 发布攻击事件
+---------------------+
+---------------------+
| Observer (Interface)|
+---------------------+
| + onAttackReceived() | // 收到攻击事件的回调方法
+---------------------+
+---------------------+
| GameServer |
+---------------------+
| + handleAttack(attack) | // 处理攻击,通知战队
| ...
+---------------------+
```
2. **编程实现**(简化版):
```python
class Player:
def __init__(self, name):
self.name = name
self.team = None
# 当被攻击时发出事件
def receive_attack(self):
if self.team is not None:
self.team.notify_attacked(self)
class Team:
def __init__(self, name):
self.players = []
self.observers = []
def add_player(self, player):
self.players.append(player)
player.team = self
for observer in self.observers:
player.on_attack_received(observer)
def notify_attacked(self, attacker):
for observer in self.observers:
observer.on_attack_received(attacker)
# 定义观察者接口
class Notification(Observer):
def on_attack_received(self, attacker):
print(f'{attacker.name}被攻击,正在请求支援...')
# 实例化并演示
server = GameServer()
player1 = Player('A')
player2 = Player('B')
team = Team('Alpha Squad')
team.add_player(player1)
team.add_player(player2)
server.register_observer(Notification()) # 注册观察者
player1.receive_attack() # 模拟攻击
```
阅读全文