您在下面看到的这段代码是我的炸弹人学校项目中的一个方法。我们有一些教程视频来帮助我们开始,视频中的老师提到我们应该让这段代码更加面向对象。我没有想到如何使其更加面向对象。
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
}
}
我向社区提出的问题是如何使其更加面向对象。我愿意接受建议。
最佳答案
您可以使用多态并在每个子类中实现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)即可:
interface MessageHandler<T extends Message> {
public void handleMessage(T message);
}
(t)->{
PlayerJoinedControl control = ControlFactory.instance().createPlayerJoinedControl();
control.playerJoined((PlayerJoined)message);
}
关于java - 如何使我的方法更加面向对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59118993/