观察者模式
观察者模式是一种行为型模式,它定义了一种一对多的依赖关系,当一个对象的状态发生改变时,它的所有依赖对象都会收到通知并自动更新。在游戏开发中,观察者模式常用于实现事件系统(例如玩家获得道具或者触发战斗事件)、UI界面等。
下面是一个简单的观察者模式的示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public interface GameEventObserver {
void onGameEvent(GameEvent event);
}
public class Player implements GameEventObserver {
public void onGameEvent(GameEvent event) {
if (event.getType() == GameEventType.ENEMY_KILLED) {
// Player gains experience and loot
}
}
}
public class GameEventManager {
private List<GameEventObserver> observers = new ArrayList<>();
public void registerObserver(GameEventObserver observer) {
observers.add(observer);
}
public void unregisterObserver(GameEventObserver observer) {
observers.remove(observer);
}
public void notifyObservers(GameEvent event) {
for (GameEventObserver observer : observers) {
observer.onGameEvent(event);
}
}
}
在这个示例中,GameEventManager 是一个观察者模式的主题,它负责管理游戏事件的订阅和发布。Player 类实现了 GameEventObserver 接口,并注册到了 GameEventManager 中。当游戏事件发生时,GameEventManager 会通知所有的观察者,包括 Player,以便它们可以处理游戏事件。
再例如,在一个 RPG 游戏中,玩家可以通过点击怪物来攻击它,需要实现点击事件的观察者模式:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public interface IClickable {
void OnClick();
}
public class Monster : IClickable {
public void OnClick() {
// 受到攻击逻辑
}
}
public class Player {
private List<IClickable> clickables = new List<IClickable>();
public void AddClickable(IClickable clickable) {
clickables.Add(clickable);
}
public void RemoveClickable(IClickable clickable) {
clickables.Remove(clickable);
}
public void OnClick() {
foreach (IClickable clickable in clickables) {
clickable.OnClick();
}
}
}
// 调用代码
Monster monster = new Monster();
Player player = new Player();
player.AddClickable(monster);
player.OnClick();
本文由作者按照 CC BY 4.0 进行授权