看起来应该是这样的:
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;
};
他们都需要自己参考..
另外:
使用weak_ptr打破圆圈可能会导致频道过早破坏!
在没有合并两个接口的情况下,哪种模式最好?
修改 @Edwin是的我已经检查了现有的讨论...... 我正在寻找的答案更符合道德而不是技术......
基本上,在C ++这样的语言中,组合的优势在于缺乏内存管理和“C&C”的可用性。在构建时,组合对象何时需要访问作曲家?
我认为唯一的解决方案是实现作曲家和(私下)同一类中的所有组件接口(以解决组件到作曲家的通信问题)。 并且可能提供该独特相同类别的特定视图,使其看起来像是一个&#39; &a;&#39; has-a&#39;关系... 但在这种情况下,所有的构图优势都会丢失!
答案 0 :(得分:1)
这个问题过于抽象,与申请分开。当您在频道中的内容发生变化,谁负责通过端口传播时会发生什么?应用程序是否会更好地通过流协议而不是面向对象的API提供服务?有多少频道与有多少端口听众?