您在下面看到的此代码是我的Bomberman School Project中的一种方法。我们获得了一些入门教程视频,而视频中的老师提到我们应该使此代码更加面向对象。关于如何使它更面向对象,我丝毫没有想到。
public void handleMessage(Message message) {
// TODO: Make this more Object Oriented
if (message instanceof PlayerJoined) {
PlayerJoinedControl control = ControlFactory.instance().createPlayerJoinedControl();
control.playerJoined((PlayerJoined)message);
} else if (message instanceof ErrorMessage) {
// TODO: Create ErrorMessageControl, make it show message in console of game
System.out.println("ERROR: " + ((ErrorMessage) message).getErrorMessage());
} else if (message instanceof StartGame) {
// TODO: ADD METHOD IMPLEMENTATION
}
}
我对社区的问题是如何使它更加面向对象。我愿意征求意见。
答案 0 :(得分:2)
您可以使用Ploymorphism并在每个子类中实现handleMessage。示例:
PlayerJoinedHandler extends MessageHandler {
public void handleMessage(PlayerJoined message) {
PlayerJoinedControl control = ControlFactory.instance().createPlayerJoinedControl();
control.playerJoined((PlayerJoined)message);
}
}
ErrorMessageHandler extends MessageHandler {
public void handleMessage(ErrorMessage message) {
System.out.println("ERROR: " + ((ErrorMessage) message).getErrorMessage());
}
}
使用Java 8,您实际上可以将lambda用于这些类,并只具有一个接口:
interface MessageHandler<T extends Message> {
public void handleMessage(T message);
}
(t)->{
PlayerJoinedControl control = ControlFactory.instance().createPlayerJoinedControl();
control.playerJoined((PlayerJoined)message);
}