组合和循环依赖


  • 通道包含类型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++这样的语言中,当被编写的对象需要访问composer时,在构建时缺乏内存管理和"this"可用性的编写有哪些优势?

我认为唯一的解决方案是在同一个类中实现composer和(私下(所有组件接口(以解决组件到composer的通信问题(。也许可以提供这个独特的同类的特定视图,使其看起来像是"has-a"关系中的"is-a"关系。。。但在这种情况下,所有的构图优势都失去了!

这个问题过于抽象,与应用程序分离。当通道中的内容发生变化时会发生什么,谁负责通过端口进行传播?应用程序由流协议而不是面向对象的API提供更好的服务吗?将有多少个通道和多少个端口侦听器?

相关内容

  • 没有找到相关文章

最新更新