java - 如何使我的方法更加面向对象?

标签 java oop

您在下面看到的这段代码是我的炸弹人学校项目中的一个方法。我们有一些教程视频来帮助我们开始,视频中的老师提到我们应该让这段代码更加面向对象。我没有想到如何使其更加面向对象。

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/

相关文章:

java - 简单的守护线程不输出消息

java - EL 相当于 WAS 8 中的 <%= object.method(parameter) %>?

java - 小程序中的主要方法替代

java - 在一个方法内同时调用多个服务

php - 在 PHP 中为重要类创建一个好的注册表类

java - 听众有更好的做法吗?

java - 锁定多个对象

Python 面向对象 : inefficient to put methods in classes?

oop - 德尔福 FMX : How to add an Event into an object (just like TEdit. OnChange)

c# - 如何获取基类型字段的值