public interface IColleague{ void Send(string message); void Receive(string message);}public class ConcreteColleagueA : IColleague{ private Mediator mediator; public ConcreteColleagueA(Mediator mediator) { this.mediator = mediator; } public void Send(string message) { mediator.Send(message, this); } public void Receive(string message) { Debug.Log("ConcreteColleagueA received message: " + message); }}public class ConcreteColleagueB : IColleague{ private Mediator mediator; public ConcreteColleagueB(Mediator mediator) { this.mediator = mediator; } public void Send(string message) { mediator.Send(message, this); } public void Receive(string message) { Debug.Log("ConcreteColleagueB received message: " + message); }}public class Mediator{ private ConcreteColleagueA colleagueA; private ConcreteColleagueB colleagueB; public void SetColleagueA(ConcreteColleagueA colleagueA) { this.colleagueA = colleagueA; } public void SetColleagueB(ConcreteColleagueB colleagueB) { this.colleagueB = colleagueB; } public void Send(string message, IColleague colleague) { if (colleague == colleagueA) { colleagueB.Receive(message); } else if (colleague == colleagueB) { colleagueA.Receive(message); } }}
时间: 2023-04-09 17:03:12 浏览: 56
这是一个关于中介者模式的代码示例,其中定义了接口IColleague和两个具体同事类ConcreteColleagueA和ConcreteColleagueB,以及中介者类Mediator。中介者类负责协调同事类之间的通信,当其中一个同事类发送消息时,中介者会将消息转发给另一个同事类。
相关问题
请认真阅读并调试模板给出的程序代码,分析该代码涉及的Java设计模式,给出改进意见。 Colleague.java public interface Colleague{ // 中介者模式中的同事(Colleague) public void giveMess(String mess);
这段代码涉及的设计模式是中介者模式。中介者模式通过引入中介者对象,将系统中的多个对象之间的交互转化为中介者和同事对象之间的交互,从而降低系统的复杂度。
该代码的改进意见:
1. 类名应该采用大写开头的驼峰命名法,即Colleague改为ColleagueInterface。
2. 接口方法名应该采用小写开头的驼峰命名法,即giveMess改为giveMessage。
3. 为了更好地体现中介者模式,应该增加一个中介者接口,并让ColleagueInterface接口继承该接口。
4. 中介者接口应该包含一个注册同事对象的方法和一个发送消息的方法。
5. 实现了ColleagueInterface接口的具体同事类应该有一个指向中介者对象的引用,并在构造函数中进行初始化。
6. 中介者对象应该保存所有的同事对象引用,以便发送消息时能够遍历所有的同事对象。
7. 发送消息时,应该调用中介者对象的发送消息方法,由中介者对象负责将消息发送给所有的同事对象。
改进后的代码如下:
ColleagueInterface.java
```
public interface ColleagueInterface {
void giveMessage(String message);
void setMediator(MediatorInterface mediator);
}
```
MediatorInterface.java
```
public interface MediatorInterface {
void register(ColleagueInterface colleague);
void sendMessage(String message);
}
```
具体同事类:
```
public class ConcreteColleague implements ColleagueInterface {
private MediatorInterface mediator;
public ConcreteColleague(MediatorInterface mediator) {
this.mediator = mediator;
mediator.register(this);
}
public void giveMessage(String message) {
mediator.sendMessage(message);
}
public void setMediator(MediatorInterface mediator) {
this.mediator = mediator;
}
}
```
中介者类:
```
public class ConcreteMediator implements MediatorInterface {
private List<ColleagueInterface> colleagues = new ArrayList<>();
public void register(ColleagueInterface colleague) {
colleagues.add(colleague);
}
public void sendMessage(String message) {
for (ColleagueInterface colleague : colleagues) {
colleague.giveMessage(message);
}
}
}
```
// 外观模式 class GameFacade { private CommandHandler commandHandler; private List observers; private GameMediator mediator; private PlayerProxy playerProxy; private GameAdapter gameAdapter; public GameFacade() { commandHandler = new IdentityHandler(); commandHandler.setNextHandler(new CommandValidationHandler()); observers = new ArrayList<>(); observers.add(new StaminaObserver()); observers.add(new ExperienceObserver()); mediator = new GameMediator(); Player player = new PlayerImpl(); playerProxy= new PlayerProxy(player); Game game = new GameImpl(); gameAdapter = new GameAdapter(game); } public void handleCommand(Command command) { commandHandler.handleCommand(command); } public void notifyPlayerAction(PlayerAction action) { for (PlayerActionObserver observer : observers) { observer.onPlayerAction(action); } } public void addServer(Server server) { mediator.addServer(server); } public void syncData(Server server) { mediator.syncData(server); } public void login() { playerProxy.login(); } public void logout() { playerProxy.logout(); } public void setLanguage(Language language) { gameAdapter.setLanguage(language); } public void setGraphics(Graphics graphics) { gameAdapter.setGraphics(graphics); } } 使用外观模式补全以上代码,要求创建一个游戏外观类,封装玩家进行游戏的复杂过程,提供简单的接口给玩家使用。外观类可以处理玩家的命令、游戏操作和界面设置等
// 外观模式
class GameFacade {
private CommandHandler commandHandler;
private List<PlayerActionObserver> observers;
private GameMediator mediator;
private PlayerProxy playerProxy;
private GameAdapter gameAdapter;
public GameFacade() {
commandHandler = new IdentityHandler();
commandHandler.setNextHandler(new CommandValidationHandler());
observers = new ArrayList<>();
observers.add(new StaminaObserver());
observers.add(new ExperienceObserver());
mediator = new GameMediator();
Player player = new PlayerImpl();
playerProxy= new PlayerProxy(player);
Game game = new GameImpl();
gameAdapter = new GameAdapter(game);
}
public void handleCommand(Command command) {
commandHandler.handleCommand(command);
}
public void notifyPlayerAction(PlayerAction action) {
for (PlayerActionObserver observer : observers) {
observer.onPlayerAction(action);
}
}
public void addServer(Server server) {
mediator.addServer(server);
}
public void syncData(Server server) {
mediator.syncData(server);
}
public void login() {
playerProxy.login();
}
public void logout() {
playerProxy.logout();
}
public void setLanguage(Language language) {
gameAdapter.setLanguage(language);
}
public void setGraphics(Graphics graphics) {
gameAdapter.setGraphics(graphics);
}
// 新增方法:玩家开始游戏
public void startGame() {
playerProxy.startGame();
}
// 新增方法:玩家结束游戏
public void endGame() {
playerProxy.endGame();
}
// 新增方法:保存游戏进度
public void saveGame() {
mediator.saveGame();
}
// 新增方法:读取游戏进度
public void loadGame() {
mediator.loadGame();
}
}