接口和实现设计结构?

Bab*_*ham 5 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:
  ...
};
Run Code Online (Sandbox Code Playgroud)

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

重要的是,此代码的用户只能Operation以特定方式与类交互,并且不能完全访问Operations类的所有内容.

我的问题:

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

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

Soe*_*ren 4

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

DIP 中的常见 UML 图如下所示: 在此输入图像描述

由于Client只是熟悉Interface,因此可以控制对特定子类的访问。实现可能如下所示:

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() {  ...  }
}
Run Code Online (Sandbox Code Playgroud)

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