繁体   English   中英

如何使我的方法更加面向对象? [关闭]

[英]How do i make my method more Object Oriented? [closed]

您在下面看到的这段代码是我的炸弹人学校项目中的一种方法。 我们得到了一些教程视频来帮助我们入门,视频中的老师提到我们应该使这段代码更加面向对象。 关于如何使它更加面向对象,我没有想到任何事情。

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
        }
    }

我对社区的问题是如何使它更加面向对象。 我愿意接受建议。

您可以使用 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);
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM