2014-04-30 2 views
0

그래서이 프로젝트를 진행하고 있으며이를 구조화하는 방법에 문제가 있습니다. 기본적으로 이것은 내가 가지고있는 것입니다.상속 - 하위 클래스를 사용하여 부모 클래스를 구성하는 방법

Main Class instansiates Listener Class.

리스너 클래스는 패킷을 수신합니다.

I packet이 수신되면 Listener 클래스는 Handler 클래스 (실행 가능 클래스)의 새 인스턴스를 만듭니다. 그런 다음 Handler 클래스는 패킷 데이터를 읽고 패킷 유형 (재부팅, 종료 등)을 결정하고 패킷 유형에 필요한 작업을 수행합니다. 내가 원하는 무엇

는 모든 다른 패킷 유형 등 RebootPacket, ShutdownPacket과 서브 클래스를 다음 부모 클래스의 패킷을하고있다

난 그냥 처리기에서 IF 문의 톤을 사용하려고했다 클래스를 사용하여 패킷 클래스의 인스턴스를 만들지 만 (packetType = "reboot", RebootPacket packet = new RebootPacket) 그러나이 작업을 수행하는 더 좋은 방법이 있어야한다고 생각합니다. 이 일을 위해 다형성을 사용하는 방법이 있습니까? 모든 제안을 부탁드립니다.

을 당신은 정말 그냥 문자열이다 "패킷"에 데이터를 공급하고있다 :

+0

귀하의 경우 패킷이 무엇인지 확실하지 않지만 네트워크를 통해 데이터를 전송하고 있다고 생각하십니까? 객체가 올 때 가장 좋은 방법은'instanceof'를 사용하거나 클래스 유형 == 당신이 찾고있는 것을 검사하는 것입니다. –

+0

@VinceEmigh 네트워크를 통해 전송되는 실제 데이터는 글자 그대로입니다. 문자열 ... – user3180103

+0

왜 객체 스트림을 사용하지 않습니까? 그것은 당신이 어쨌든 무엇을하고 싶은지에 대한 것 같습니다. 블로킹 io를 사용한다면,'ObjectOutputStream'은'Serializable'을 구현하는 어떤 객체라도 보낼 수 있습니다. 그렇지 않다면 문자열 값을 확인하여 생성해야하는 것을 확인해야합니다. –

답변

0

여기에 만약 내가 잘못 문제에 대한 이해가 저를 수정하시기 바랍니다입니다. 이러한 패킷에는 여러 유형이있을 수 있으며 각 유형의 패킷에는 연관된 다른 조치가 있습니다. 패킷을 읽을 때마다 Handler 클래스의 새 인스턴스가 만들어지고 유형에 따라 패킷에 필요한 작업을 수행합니다. 나는 패킷 유형이 입력에 내재되어 있다고 가정하려고한다.

이 경우에는 다형성을 사용하는 것이 좋습니다. 개별 유형의 패킷과 관련된 각각의 '작업'을 수행하는 하나의 메소드를 작성합니다. 매개 변수가 다른 유형이된다는 점을 제외하면 이러한 메소드 각각은 동일한 메소드 서명을 갖습니다. 예를 들어 :

public void doSomething(RebootPacket p) 

public void doSomething(ShutDownPacket p) 

당신이 사용하는 모든 패킷 유형에 대해 수행 할 수있다. 이렇게하면 doSomething(packet)을 호출하고 유형에 관계없이 올바른 방식으로 패킷을 처리하게 할 수 있습니다.

이 상황에서는 상속을 사용하지 않는 것이 좋습니다. 하위 클래스와 수퍼 클래스가있는 경우 하위 클래스가 수퍼 클래스와 동일한 메소드 전부 또는 대부분과 수퍼 클래스가 가질 수없는 자체 메소드 중 일부를 갖기를 원합니다. 모든 패킷이 공통적으로 가질 수있는 방법이 많지는 않지만, 각각의 패킷을 처리하는 방법이 다른 것처럼 보입니다. 이것이 올바른 가정이라면 다형성이 가장 적합합니다. 그렇지 않은 경우 자세한 정보로 의견을 보내주십시오.

+0

패킷을 클래스에 어떻게 할당합니까? 나는 단지 문장이 필요한 것일까? – user3180103

+0

if 진술은 가장 쉬운 방법입니다. 그러나 처음부터 큰 if 문 블록을 사용해야하는 경우 동일한 if 문을 사용하여 적절한 메서드를 호출 할 수없는 이유는 알 수 없습니다. – joepeacock001

+0

글쎄, 내가 지금하고있는 일, 많은 if 문 그리고 그 방법을 호출하는 것이지만, 나는 매우 조직적이지 않은 것처럼 느껴진다. 모든 것은 하나의 클래스로 밀어 넣는다. – user3180103

관련 문제