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

时间:2019-11-30 18:20:29

标签: java oop

您在下面看到的此代码是我的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
        }
    }

我对社区的问题是如何使它更加面向对象。我愿意征求意见。

1 个答案:

答案 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);
    }