c++ - 接口(interface)和实现设计结构?

标签 c++ design-patterns inner-classes

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

我正在使用 ProcessMgr 作为接口(interface)类,可以从中调用每个操作:

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) 是否有更好/更有效的分离接口(interface)和实现的方法?

最佳答案

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

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

由于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() {  ...  }
}

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

关于c++ - 接口(interface)和实现设计结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41909902/

相关文章:

c++ - 带有 LD_PRELOAD 和 boost::interprocess 的 mmap() 不起作用

c++ - 遍历类模板的显式特化

c++ - Pthreads:为 pthread_cond_wait 使用 While 循环背后的逻辑

javascript - 有没有一种设计模式可以轻松管理 "cascading choices"?

oop - 我应该保留设计模式术语吗?

c++ - 在 C++ 中读取数据

java - 从多个位置正确退出正在运行的程序的设计模式

java - 如何从匿名内部类调用特定的父构造函数?

java - 如何从不在内部类中的 ActionListener 返回值

java - 从内部类实例实例化外部类?