상속 나무의 잎 사이에서 정보를 교환하는 데 문제가 있습니다. 그러나 특정 잎은 다른 특정 잎과 정보를 교환하기 만하면됩니다.동일한 수준의 상속에서 정보를 교환하는 방법
이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);
};
transportOut
및 transportIn
의 구현 예는 다음과 같습니다 :
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를 필요로하기 때문에 나에게 부풀어 오르고 나쁜 디자인으로 보입니다. 더 좋은 방법이 있는지, 처음부터 이것을 설계한다면 누구나 어떻게 처리 할 수 있을지 궁금합니다.
미리 감사드립니다.
나는 당신을 완전히 확인되지하지만 첫번째 생각은 항목에 작업을 첨부했다. –
누구나 봐봐. 문제는 LeSnip3Rs 제안 – user1295249