所以我正在研究这个项目,我在如何构建这个项目时遇到了麻烦。基本上,这就是我所拥有的:
Main Class instansiates Listener Class。
侦听器类侦听数据包。
收到数据包后,Listener类会创建一个Handler类的新实例(可运行)。然后,Handler类读取数据包数据并确定数据包类型(重新启动,关闭等)并使用它执行所需的操作。
我想要做的是,有一个父类Packet,然后有子类,包含所有不同的数据包类型RebootPacket,ShutdownPacket等。
我打算在Handler类中使用大量的IF语句来创建数据包类的实例(如果packetType =“reboot”,RebootPacket packet = new RebootPacket)但是,我觉得应该有更好的方法做这个。我可以使用多态来做这个吗?任何建议都表示赞赏。
答案 0 :(得分:0)
以下是我对您的问题的理解,如果我错了,请纠正我:
您正在使用"数据包"这真的只是字符串。这些数据包可以有多种类型,每种类型的数据包都有与之关联的不同操作。每次读入数据包时,都会创建一个Handler类的新实例,该实例根据类型执行数据包所需的操作。我将假设数据包的类型是输入固有的。
在这种情况下,我建议使用多态。我会创建一种方法来执行每个操作'与各种类型的数据包相关联。这些方法中的每一个都具有相同的方法签名,除了参数将是不同类型。例如:
public void doSomething(RebootPacket p)
和
public void doSomething(ShutDownPacket p)
可以对您将使用的每种数据包类型执行此操作。这允许你做的只是调用doSomething(packet)
并让它以正确的方式处理数据包,无论其类型如何。
我建议不要在这种情况下使用继承。当你有一个子类和一个超类时,你希望子类拥有所有或大多数与超类相同的方法,以及超类不能拥有的一些方法。在我看来,似乎没有多种方法可以使所有数据包具有共同点,而是采用不同的处理方法。如果这是一个正确的假设,多态性最有意义。如果没有,请评论更多信息。