- 甲通道包含元素類型的 E.
- 通道還具有一個端口,讓進入元件在溝道
它應該看起來像這樣:組成及循環依賴
template<
typename E>
class IOutPort{
public:
...
/**
* Takes an element (chosen by the implementation) that is in channel
*
* @return
* The element
*/
virtual E take() = 0;
};
template<
typename E>
class IChannel {
public:
...
/**
* Gives access to the out port of this channel
*
* @return
* A smart pointer to the channel's port
*/
virtual std::shared_ptr<IOutPort<E>> getOutPort() = 0;
};
他們都需要引用自己..
另外:
- 通道IMPL不能在施工時間端口IMPL提供自身的shared_ptr的(因爲它尚未完成)
- 如果兩者都使用強引用,它們將永遠不會被釋放
- 某些用戶代碼可能希望存儲端口的指針供以後使用......所以當時該通道必須仍然存在!
用weak_ptr打破圓圈可能會導致頻道的過早破壞!
哪個是最好的模式,沒有合併兩個接口?
編輯: @Edwin是的,我已經檢查現有的討論... 我要找的答案是比技術更合乎道德的...
實質上,它們是組成優勢在像C++這樣的語言中,當構造對象需要訪問作曲者時,缺乏內存管理和'this'的可用性?
我認爲獨特的解決方案是在同一個類中實現作曲者和(私下)所有組件接口(以解決組件到作曲者通信問題)。 也許提供這個獨特的同一類的具體意見,使看起來'是一個'關係在'有'的關係... 但在這種情況下,所有的組成優勢都失去了!
我不知道你是否注意到了,但是右邊的邊欄中提到的很多話題聽起來與你所問的非常相似。在發佈問題之前,您是否先檢查出它們? – Edwin