2011-12-07 7 views
1
  • 채널요소 유형에게 E. 포함
  • 채널은 을 갖는다 요소에 채널에 대한 액세스를 제공하는 포트

다음과 같이 표시되어야합니다.조성 및 순환 종속성

이들은 모두 자체를 참조 할 필요

844,.. 또한
(아직 완료되지 않았으므로) 채널 IMPL 건축시 포트 IMPL 자체의 shared_ptr을 제공 할 수

  • 둘 다 강력한 참조를 사용하면 결코 해제되지 않습니다.
  • 일부 사용자 코드는 나중에 사용할 수 있도록 포트 포인터를 저장하려고 할 수 있습니다. 따라서 채널이 아직 존재해야합니다!

weak_ptr로 원을 깨면 채널이 조기에 파괴 될 수 있습니다!

두 인터페이스를 병합하지 않고 따라야 할 가장 좋은 패턴은 무엇입니까 ??

편집 : @Edwin 그래, 난 이미 구성의 장점 기존의 토론 ... 내가 찾고 있어요 대답은 기술보다 더 윤리적입니다 ... 실질적으로

을 확인했다 합성 된 객체가 작곡가에 접근 할 필요가있을 때, 건축 시간에 'this'의 메모리 관리와 유용성이 부족한 C++ 같은 언어로?

저는 고유 한 솔루션이 컴포저와 컴포지션 통신 문제를 해결하기 위해 동일한 클래스의 모든 구성 요소 인터페이스를 구현하는 것이라고 생각합니다. 그리고 'has-a'관계에 'is-a'관계가 나타나는 독특한 독특한 클래스의 특정 견해를 제공하십시오 ... 그런 시나리오에서는 모든 구성 이점이 손실됩니다!

+5

아직 눈치 챘을 지 모르겠으나, 사이드 바에있는 많은 주제가 당신이 요구하는 것과 굉장히 비슷하게 들립니다. 질문을 게시하기 전에 먼저 체크 아웃 했습니까? – Edwin

답변

1

질문이 너무 추상적이어서 응용 프로그램과 분리되어 있습니다. 채널의 내용이 변경되면 누가 포트를 통해 전파 할 책임이 있습니까? 애플리케이션이 객체 지향 API가 아닌 스트림 프로토콜에 더 잘 서비스 될 수 있을까요? 얼마나 많은 수의 채널 대 몇 명의 포트 수신기가 있을까요?

+0

동시 환경에서 작동합니다. 에이전트가 한 요소를 처리 할 준비가되면 포트에서 'take'를 호출합니다. 다른 것들도 똑같은 일을 할 수 있습니다 ... 그러나 한 번에 하나의 요소 만 포트에서 꺼내 지므로 구현과 스케줄러 정책이 직렬화의 일부 양식에 기여합니다. '채널'추상화 서버는 요소 삽입의 의미를 숨길 목적으로 다음과 같이 제한 크기의 큐, 우선 순위 큐 (각 삽입은 우선 순위에 대한 정보를 포함해야합니다 ...), 삽입 자와 기다리는 수취인 등 사이의 랑데뷰 – MrAduer