1

我处于一种我要进行多重继承的情况(以及一种可怕的钻石)。我想避免这种情况,所以希望有人有想法以另一种方式做到这一点。

我想制作一个处理网络连接的库。我有一个抽象工厂,它具有创建 tcpServer、tcpClient、udp 的方法,以及从目录创建条目的最后一个方法(将配置文件提供给工厂的 init 方法)。所以我为这种连接创建了类(实际上是接口)。入口是基本接口。为简化起见,假设它具有设置数据和状态回调的方法。所有其他类(tcpClient ...)都继承自这一类。

我想用 boost 来实现这个工厂,所以我必须实现所有的类(tcpServer,...)。问题是所有类的实现都需要一个共同的基础。这是我要做的,但我不确定这是正确的方法:

这是摘要部分:

// The abstract factory:
class Factory
{
    virtual IO::TcpServer* createTcpServer() = 0;
    virtual IO::TcpClient* createTcpClient() = 0;

    virtual IO::Entry* createFromConf() = 0;
};  


// The Entry interface: 
class Entry {
    virtual bool isChild() const = 0;
    // ...

    virtual void setDataCbk() = 0;
    virtual void setStateCbk() = 0;
};

// TcpClient interface
class TcpClient : public IO::Entry {
    /* Nothing yet but stuff will come */
}; 

这是 boost 实现(类名相同但在不同的命名空间中;我没有显示工厂实现):

// Entry first step of implementation (still abstract)
class Entry : public IO::Entry
{
    virtual void setDataCbk();
    virtual void setStateCbk();
};

// Flat entry : entry that can't have child (like tcp client, udp ...)
class FlatEntry : public IO::Boost::Entry
{
    virtual bool isChild() const; // Will always return false
    // ...
};

// The final TcpClient implementation
class TcpClient : public IO::TcpClient
            , public IO::Boost::FlatEntry
{
    // ...
};

所以我很担心这个多重继承的事情。另一方面,超类是一个纯接口(没有数据,只有纯虚方法)。有任何想法吗?

4

0 回答 0