Bootstrap

C++之设计原则

在C++中,设计原则是一套指导软件开发过程中决策和设计模式的准则,旨在提高软件的可维护性、可扩展性、灵活性和可靠性。

以下是几种核心设计原则:

1.单一职责

功能单一,方便组合和复用。

图示:

应用场景:例如,我们在写服务器初始化的代码时,不是直接将初始化的代码写到一个函数里,而是分别调用数据库初始化代码、网络初始化代码、线程池初始化代码...... 

2.开闭原则

对扩展开放,对修改关闭。

可通过子类继承,然后子类重写,这样可以避免修改父类的实现。

图示:

应用场景:

1、例如,我们在用Qt设计界面时,可能有些控件不能满足我们对于界面设计的需求,这时候我们可以重写控件。

比如,通过重写QWidget类,我们把控件设计成这样:

3.里氏代换原则

任何基类可能出现的地方,子类一定可以出现。

里氏代换原则的要点:

  1. 子类必须完全实现基类的方法
  2. 子类可以有自己的实现细节
  3. 子类不应该改变基类的行为

主要目的:确保继承关系中的基类和子类之间具有一致的行为,从而使得子类可以安全地替换基类,而不影响程序的其他部分。这个原则有助于提高代码的可维护性和可扩展性,同时也是实现开闭原则的一个重要手段。 

4.依赖倒转原则

面向接口编程,依赖于抽象而不依赖于具体。

图示:

应用场景:例如,我们写一个网络接口,核心类调用网络接口完成网络的各种功能,一旦写好,就不会再改变,当需要改变的时候,只需要修改子类即可。

5.接口隔离原则

使用多个隔离的接口,比使用单个接口更好。

举例:在一个类中,我们定义很多方法,此时这个类会显得过于臃肿,为了避免这种情况,我们将一个类拆分成多个类,将原来类中方法放入新建的多个类中,如果想使用类方法只需要调用相应类即可。

6.迪米特法则(最少知道原则)

一个实体应当尽量少的和其他实体之间发生相互作用,使得系统功能模块相对独立。

用于降低耦合,增强复用

图示:

应用场景:例如,Qt中信号和槽。

7.合成复用原则

尽量使用组合/聚合的方式,而不是使用继承。

类之间的横向关系(组合、依赖、关联、聚合)参考文章:

https://mp.csdn.net/mp_blog/creation/editor/131214044

// 使用继承
class Base {
public:
    void baseFunction() {}
};

class Derived : public Base {
    // 继承带来的问题
};

// 使用组合
class Base {
public:
    void baseFunction() {}
};

class Composite : public Base {
    Base member; // 组合Base类
};

int main() {
    Composite compositeObject;
    compositeObject.baseFunction(); // 访问组合对象的成员函数
    return 0;
}

上述代码中,Composite类通过组合Base类来复用其功能,而不是通过继承。这种方式提供了更高的灵活性和可维护性。 

什么是低耦合,高内聚?

低耦合就是降低彼此的依赖,高内聚就是职责尽量单一。

如有问题,欢迎交流指正! 

;