// 观察者模式 interface PlayerActionObserver { void onPlayerAction(PlayerAction action); } class StaminaObserver implements PlayerActionObserver { public void onPlayerAction(PlayerAction action) { // 扣除体力逻辑 System.out.println("StaminaObserver observed the player action."); } } class ExperienceObserver implements PlayerActionObserver { public void onPlayerAction(PlayerAction action) { // 增加经验逻辑 System.out.println("ExperienceObserver observed the player action."); } } 使用观察者模式补全以上代码,要求实现服务器状态的观察和处理。当服务器发生异常或者繁忙时,触发状态事件,并通知观察者(例如选择其他服务器、调整游戏画面质量等)进行相应的处理。
时间: 2024-04-04 20:30:36 浏览: 14
// 定义状态枚举
enum ServerStatus {
NORMAL, // 正常状态
EXCEPTION, // 异常状态
BUSY // 繁忙状态
}
// 定义服务器状态观察者接口
interface ServerStatusObserver {
void onStatusChanged(ServerStatus status);
}
// 定义服务器类
class Server {
private ServerStatus status = ServerStatus.NORMAL; // 初始状态为正常
private List<ServerStatusObserver> observers = new ArrayList<>(); // 观察者列表
// 注册观察者
public void addObserver(ServerStatusObserver observer) {
observers.add(observer);
}
// 移除观察者
public void removeObserver(ServerStatusObserver observer) {
observers.remove(observer);
}
// 设置状态并通知观察者
public void setStatus(ServerStatus status) {
this.status = status;
notifyObservers();
}
// 获取当前状态
public ServerStatus getStatus() {
return status;
}
// 通知观察者状态变化
private void notifyObservers() {
for (ServerStatusObserver observer : observers) {
observer.onStatusChanged(status);
}
}
}
// 定义服务器状态观察者类
class ServerStatusHandler implements ServerStatusObserver {
@Override
public void onStatusChanged(ServerStatus status) {
switch (status) {
case EXCEPTION:
// 处理异常状态
System.out.println("ServerStatusHandler: Handling server exception...");
// 选择其他服务器
// ...
break;
case BUSY:
// 处理繁忙状态
System.out.println("ServerStatusHandler: Handling server busy...");
// 调整游戏画面质量
// ...
break;
default:
// 处理正常状态
System.out.println("ServerStatusHandler: Server is normal.");
break;
}
}
}
// 示例代码
public static void main(String[] args) {
Server server = new Server();
ServerStatusHandler handler = new ServerStatusHandler();
server.addObserver(handler);
// 模拟服务器状态变化
server.setStatus(ServerStatus.EXCEPTION);
server.setStatus(ServerStatus.BUSY);
server.setStatus(ServerStatus.NORMAL);
}