设计模式之设计原则

C++ 设计模式之设计原则

设计模式中的设计原则是指导软件设计的基本准则,旨在提高代码的可维护性、可扩展性和灵活性。这些原则帮助开发者编写出更健壮、更易于理解和更易于修改的代码。以下是一些关键的设计原则及其总结:

1. 单一职责原则

原则:一个类应该只有一个引起变化的原因,即一个类只负责一个职责。

优点

  • 提高类的内聚性。
  • 降低类的复杂度。
  • 提高代码的可维护性和可读性。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
class ReportGenerator {
public:
void generateReport() {
// 生成报告的逻辑
}
};

class ReportPrinter {
public:
void printReport() {
// 打印报告的逻辑
}
};

2. 开放封闭原则

原则:软件实体(类、模块、函数等)应该对扩展开放,对修改封闭。

优点

  • 提高代码的可扩展性。
  • 降低代码的修改风险。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Shape {
public:
virtual void draw() const = 0;
virtual ~Shape() = default;
};

class Circle : public Shape {
public:
void draw() const override {
// 绘制圆形
}
};

class Rectangle : public Shape {
public:
void draw() const override {
// 绘制矩形
}
};

3. 里氏替换原则

原则:派生类对象应该能够替换基类对象而不影响程序的正确性。

优点

  • 保证继承关系的正确性。
  • 提高代码的可替换性和可扩展性。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
class Bird {
public:
virtual void fly() const {
// 鸟类飞行的逻辑
}
};

class Sparrow : public Bird {
public:
void fly() const override {
// 麻雀飞行的逻辑
}
};

4. 接口隔离原则

原则:一个类不应该依赖于它不使用的接口。应将接口拆分为更小、更专注的接口。

优点

  • 提高接口的内聚性。
  • 降低类的复杂度和耦合度。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Printer {
public:
virtual void print() const = 0;
virtual ~Printer() = default;
};

class Scanner {
public:
virtual void scan() const = 0;
virtual ~Scanner() = default;
};

class MultiFunctionPrinter : public Printer, public Scanner {
public:
void print() const override {
// 打印逻辑
}

void scan() const override {
// 扫描逻辑
}
};

5. 依赖倒置原则

原则:高层模块不应该依赖于低层模块,二者都应该依赖于抽象。抽象不应该依赖于细节,细节应该依赖于抽象。

优点

  • 提高代码的灵活性和可扩展性。
  • 降低模块之间的耦合度。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class IWorker {
public:
virtual void work() const = 0;
virtual ~IWorker() = default;
};

class Worker : public IWorker {
public:
void work() const override {
// 工作逻辑
}
};

class Manager {
public:
Manager(IWorker* worker) : worker_(worker) {}

void manage() const {
worker_->work();
}

private:
IWorker* worker_;
};

设计模式中的设计原则总结

  1. 单一职责原则(SRP):一个类只负责一个职责。
  2. 开放封闭原则(OCP):软件实体应该对扩展开放,对修改封闭。
  3. 里氏替换原则(LSP):派生类对象应该能够替换基类对象而不影响程序的正确性。
  4. 接口隔离原则(ISP):一个类不应该依赖于它不使用的接口。
  5. 依赖倒置原则(DIP):高层模块不应该依赖于低层模块,二者都应该依赖于抽象。

设计模式之设计原则
https://linhanmic.github.io/2024/09/06/设计模式之设计原则/
作者
Linhanmic
发布于
2024年9月6日
更新于
2024年9月13日
许可协议