我处于一种我将要进行多重继承的情况(以及恐惧之类的钻石)。我希望避免这种情况,所以希望有人有想法以另一种方式做到这一点。
我想创建一个处理网络连接的库。我有一个抽象工厂,其方法是创建一个tcpServer,tcpClient,udp,以及一个从目录创建条目的最后一个方法(配置文件被赋予工厂的init方法)。所以我已经为这种连接创建了类(实际上是接口)。 Entry是基础接口。为简化起见,我们只是说它有设置数据和状态回调的方法。所有其他类(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
{
// ...
};
所以我担心这个多重继承的事情。另一方面,super classe是一个纯粹的接口(没有数据,只有纯虚方法)。有什么想法吗?