从基础对象继承接口是一个好习惯吗?

时间:2014-04-23 09:28:34

标签: c++ oop design-patterns

代码段更好地解释了这个问题。这段代码片段可能无法通过编译,但很好地解释了这个问题。

从代码片段中,接口INetworkAddressMonitor类继承自Observerable以避免“将两个对象传递给其他组件”。

所以INetwworkAddressMonitor有两个责任,

  • 耦。
  • 重复使用Observerable代码。

这是一个好习惯吗?如果没有,如何处理?

template <typename IObserverT> class Observerable
{
public:
    virtual ~Observerable(){}
    virtual void addObserver(IObserverT* obj) { ... }
    virtual void removeObserver(IObserverT* obj) { ... }
private:
    ...
};

class INetworkAddressMonitorListener
{
public:
    virtual void onXXXX() = 0;
};

// We don't want to pass NetworkAddressMonitor to another object,
// so we define INetworkAddressMonitor.
// We inherit INetworkAddressMonitor from Observerable, to avoid 
// pass both Observerable object and INetworkAddressMonitor. 
// IS THIS AN GOOD PRACTICE?
class INetworkAddressMonitor: public Observerable<INetworkAddressMonitorListener>
{
public:
    virtual ~INetworkAddressMonitor() {};
    virtual void start() {};
    ... ...
};

class NetworkAddressMonitor: INetworkAddressMonitor
{
    ... ...
}

1 个答案:

答案 0 :(得分:0)

取决于。

如果要创建一个供各种客户端应用程序使用的对象,那么只需发布接口,而不是整个对象就可以提供有用的封装(信息隐藏)。

如果您有一组具有类似功能的对象,例如多个打印机驱动程序,然后使用通用接口使客户端应用程序更容易混合和匹配对象(例如不同的打印机),而不需要为每个不同的对象分别拥有自己的代码。

复杂的程序通常会为&#34;附加组件&#34;定义一个界面。或者&#34;扩展&#34; - 例如用于图形程序的过滤器。然后,您可以设计自己的加载项,程序可以利用其功能,而无需了解有关特定加载项的任何特定信息。

在上述情况和许多其他类似的情况下,使用接口基类很有意义。在其他情况下,它可能不一定是个好主意。