2012-05-26 3 views
0

상속 나무의 잎 사이에서 정보를 교환하는 데 문제가 있습니다. 그러나 특정 잎은 다른 특정 잎과 정보를 교환하기 만하면됩니다.동일한 수준의 상속에서 정보를 교환하는 방법

class station 
{ 
virtual void transportOut(item* i, station *target) = 0; 
virtual void transportIn(item* i, station *source) = 0; 
}; 

class stationTransportOnly : public station 
{ 
virtual void transportOut(item* i, station *target); 
virtual void transportIn(item* i, station *source); 
}; 

class stationTransportAndRotate : public station 
{ 
virtual void transportOut(item* i, station *target); 
virtual void transportIn(item* i, station *source); 
}; 

transportOuttransportIn의 구현 예는 다음과 같습니다 :

void transportOut(item *i, station *target) 
{ 
target->transportIn(i, this); 
SendTransportOutCommandToRealMachine(i. target); 
} 

void transportIn(item *i, station *source) 
{ 
SendTransportInCommandToRealMachine(i. source); 
} 

는 스테이션이 전송을 처리하는 방법 ( 다음 (크게 단순화) 상속 트리 및 샘플 구현을 봐주십시오 예를 들어, 어떤 명령이 실제 컨베이어 벨트로 보내지는지, 스테이션 모델이 스테이션 특정 임). 이것은 수년 동안 제대로 작동했지만 요구 사항이 변경되었습니다. 과거에 필요했던 것보다 일부 스테이션의 전송을 동기화해야했습니다. 수송 명령에 "작업 id"가 필요하며, out-transportation station과 in-transport station에 대해 동일해야합니다. ID는 transportOut에서 생성 될 수 있지만 문제는 운송 중 스테이션에서 ID를 전달하는 방법입니다.

나는 단지 transportIn의 인터페이스를 확장 할 수 있지만, 소수의 기존 스테이션 만이이 ID를 필요로하기 때문에 나에게 부풀어 오르고 나쁜 디자인으로 보입니다. 더 좋은 방법이 있는지, 처음부터 이것을 설계한다면 누구나 어떻게 처리 할 수 ​​있을지 궁금합니다.

미리 감사드립니다.

+0

나는 당신을 완전히 확인되지하지만 첫번째 생각은 항목에 작업을 첨부했다. –

+0

누구나 봐봐. 문제는 LeSnip3Rs 제안 – user1295249

답변

0

왜 항목에 id 속성을 전달할 수 없습니까? 그런 다음 TransportOut은 해당 ID를 설정할 수 있으며이 ID는 TransportIn 메소드에서 읽습니다. 그와 마찬가지로

:

void transportOut(item *i, station *target) 
{ 
    i->SetID(generateID()); 
    target->transportIn(i, this); 
    SendTransportOutCommandToRealMachine(i, target); 
} 

void transportIn(item *i, station *source) 
{ 
    int taskID = i->GetID(); 
    SendTransportInCommandToRealMachine(i, source); 
} 
+0

에 주석에 묻힌 힌트로 해결되었습니다. taskId가 명령 쌍에 바인딩되어 있고 새로운 명령 쌍마다 변경되기 때문입니다. A → B → C의 전송은 A → B 및 B → C에 대해 다른 ID를 갖습니다. 항목의 SetId는 적어도 전환 (A-> B 또는 B-> C)이 의미 된 추가 정보가 필요합니다. – user1295249

+0

그것은 여전히 ​​나쁘다. 나는 스테이션의 10 %만이 필요로하는 아이템 인터페이스를 깨뜨릴 것이다. 기본적으로 같은 생각이다. ( – user1295249

+0

실제로는 A-> B에서 이드 1, 그 다음 B-> C에서 2입니다. 이것은 전송 전달 함수에 설정되어 있기 때문에 가능합니다. 예를 들어 intrisincally 명령 쌍을 알고 있습니다. 그것의 추함에 관해서는 정수를 추가하는 것입니다. 그러나 인터페이스를 변경하여 "컨텍스트"매개 변수를 추가 할 수 있습니다. –

관련 문제