2014-04-30 38 views
0

所以我正在这个项目上工作,而且我在如何构造这个问题上遇到了麻烦。基本上,这是我所拥有的:继承 - 如何构造一个父类与儿童

Main Class instansiates Listener Class。

Listener类侦听数据包。

当我收到数据包时,Listener类将创建一个Handler类的新实例(它是一个可运行的)。 Handler类然后读取数据包数据并确定数据包类型(重启,关机等)并完成它所需要的。

我想要做的,是有一个父类的数据包,然后有子类的所有不同的数据包类型RebootPacket,ShutdownPacket等

我只打算用吨IF语句的处理程序类来创建数据包类的实例(如果packetType =“rebo​​ot”,RebootPacket数据包=新的RebootPacket),但是,我觉得应该有更好的方法来做到这一点。我可以如何使用多态性来做到这一点?任何建议表示赞赏。

+0

林不知道什么是数据包在你的情况下,但即时通讯猜测你通过网络发送数据?当对象进入时,最好的方法是使用'instanceof'或者检查类的类型==你在找什么 –

+0

@VinceEmigh那么通过网络发送的实际数据就是文本,就像一串... – user3180103

+0

为什么不使用Object流?看起来好像这就是你想要做的反正。如果你使用阻塞io,ObjectOutputStream可以发送任何实现Serializable的对象。如果不是,那么是的,您需要检查字符串值以查看您需要创建的内容 –

回答

0

这是我对你的问题的理解,请纠正我,如果我错了:

你被送入“包”这是真正的字符串数据。这些数据包可以有多种类型,每种类型的数据包都有不同的动作。每次读入数据包时,都会创建一个Handler类的新实例,它根据类型完成数据包所需的操作。我将假设包的类型是输入固有的。

在这种情况下,我会建议使用多态。我会创建一个方法来执行与各种类型的数据包关联的每个“操作”。每种方法都有相同的方法签名,只是参数的类型不同。例如:

public void doSomething(RebootPacket p) 

public void doSomething(ShutDownPacket p) 

这可能为将要使用的每个数据包类型来完成。这可以让你做的只是拨打doSomething(packet),让它以正确的方式处理数据包,不管类型如何。

我建议在这种情况下不要使用继承。当你有一个子类和一个超类时,你希望这个子类拥有与超类相同的所有或大部分方法,再加上超类所不具备的一些方法。在我看来,似乎并不是所有数据包都有共同的方法,而是处理每个数据包的不同方式。如果这是一个正确的假设,那么多态是最有意义的。如果不是,请评论更多信息。

+0

如何将数据包分配给一个类?如果说明,我是否需要? – user3180103

+0

如果语句是最简单的方法。但是,如果您首先需要使用大量的if语句,我不明白为什么您不能使用相同的if语句来调用正确的方法。 – joepeacock001

+0

嗯,我的意思是,这就是我现在正在做的,很多if语句,然后调用方法,但是我觉得那是非常无组织的,一切都被推到一个类中,等等。 – user3180103