接口和实现设计结构?

时间:2017-01-28 12:40:55

标签: c++ design-patterns inner-classes

我在使用C ++设计大型程序时非常陌生。我正在编写一系列操作,每个操作都有自己的类,这些类将由ProcessMgr类调用。

我使用ProcessMgr作为接口类,可以从中调用每个操作:

class ProcessMgr
{
 private:
   class OperationOne;
   class OperationTwo;
   class OperationThree;
}

class ProcessMgr::OperationOne 
{
 public:
   ...
};
class ProcessMgr::OperationTwo
{
 public:
  ...
};
class ProcessMgr::OperationThree
{
 public:
  ...
};

这使我能够控制对Operation类的访问类型,因此不会暴露其大部分底层代码。

此代码的用户只能以特定方式与Operation类进行交互,并且无法完全访问Operations类的所有内容,这一点非常重要。

我的问题:

1)这是设计大型程序的好方法吗?大多数库,例如CURL,都是以这种方式构建的吗?

2)是否有更好/更有效的分离接口和实现的方法?

1 个答案:

答案 0 :(得分:4)

C ++(或其他OOP语言)中的普通接口提供了定义。 "操作类"必须从接口派生,以便您将实现与客户端分离。这个原则称为Dependency inversion principle(DIP)

DIP中的常见UML图如下所示: enter image description here

由于客户端只熟悉接口,因此您可以控制对特定子类的访问。 实现可能如下所示:

class ProcessMgr {
    virtual void foo() = 0;
    virutal void bar() = 0;
}

class Operation1 : public ProcessMgr {
    virtual void foo() {  ...  }
    virtual void bar() {  ...  }
}

class Operation2 : public ProcessMgr {
    virtual void foo() {  ...  }
    virtual void bar() {  ...  }
}

DIP是一系列非常好的原则的原则,称为SOLID。要设计大型项目,还有很多工作要做和学习。但SOLID原则是理解如何设计软件应用程序的良好开端。