在C++中,设计原则是一套指导软件开发过程中决策和设计模式的准则,旨在提高软件的可维护性、可扩展性、灵活性和可靠性。
以下是几种核心设计原则:
1.单一职责
功能单一,方便组合和复用。
图示:
应用场景:例如,我们在写服务器初始化的代码时,不是直接将初始化的代码写到一个函数里,而是分别调用数据库初始化代码、网络初始化代码、线程池初始化代码......
2.开闭原则
对扩展开放,对修改关闭。
可通过子类继承,然后子类重写,这样可以避免修改父类的实现。
图示:
应用场景:
1、例如,我们在用Qt设计界面时,可能有些控件不能满足我们对于界面设计的需求,这时候我们可以重写控件。
比如,通过重写QWidget类,我们把控件设计成这样:
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类来复用其功能,而不是通过继承。这种方式提供了更高的灵活性和可维护性。
什么是低耦合,高内聚?
低耦合就是降低彼此的依赖,高内聚就是职责尽量单一。
如有问题,欢迎交流指正!