SOLID原则学习,单一职责原则(Single Responsibility Principle)

文章目录

  • [1. 定义](#1. 定义)
  • [2. 核心思想](#2. 核心思想)
  • [3. 优点](#3. 优点)
  • [4. 总结](#4. 总结)

1. 定义

单一职责原则是面向对象设计中的五大原则(SOLID)之一,由Robert C. Martin提出。它指出一个类应该只有一个引起它变化的原因,即一个类应该只负责一项职责。


2. 核心思想

职责:指的是类所承担的任务或功能。
单一:一个类应该只负责一个功能领域中的一项职责。

3. 优点

  • 高内聚:类的职责单一,功能集中,代码更易理解和维护。

  • 低耦合:职责分离后,类之间的依赖减少,修改一个类不会影响其他类。

  • 可复用性:职责单一的类更容易在其他地方复用。

  • 可测试性:职责单一的类更容易进行单元测试。

举例说明

假设我们有一个类 Report,它负责生成报告并将其打印出来。这个类违反了单一职责原则,因为它承担了两项职责:生成报告和打印报告。
违反SRP的代码:

cpp 复制代码
class Report {
public:
    void generateReport() {
        // 生成报告的逻辑
        std::cout << "Generating report..." << std::endl;
    }

    void printReport() {
        // 打印报告的逻辑
        std::cout << "Printing report..." << std::endl;
    }
};

在这个例子中,Report 类负责生成报告和打印报告。如果未来需要修改生成报告的逻辑或打印报告的逻辑,都需要修改 Report 类,这增加了类的复杂性和维护成本。


遵循SRP的代码:

为了遵循单一职责原则,我们可以将 Report 类拆分为两个类:ReportGenerator 和 ReportPrinter,分别负责生成报告和打印报告。

cpp 复制代码
class ReportGenerator {
public:
    void generateReport() {
        // 生成报告的逻辑
        std::cout << "Generating report..." << std::endl;
    }
};

class ReportPrinter {
public:
    void printReport() {
        // 打印报告的逻辑
        std::cout << "Printing report..." << std::endl;
    }
};

现在,ReportGenerator 类只负责生成报告,ReportPrinter 类只负责打印报告。这样,每个类都只有一个职责,代码更加清晰,易于维护和扩展。
使用示例:

cpp 复制代码
int main() {
    ReportGenerator generator;
    ReportPrinter printer;

    generator.generateReport();  // 生成报告
    printer.printReport();       // 打印报告

    return 0;
}

4. 总结

单一职责原则通过将类的职责分离,使得每个类都专注于一个功能领域,从而提高了代码的可维护性、可复用性和可测试性。在实际开发中,遵循SRP可以帮助我们设计出更加清晰、灵活的软件系统。

相关推荐
17´6 小时前
使用QT+OpenCV+C++完成一个简单的图像处理工具
c++·图像处理·qt·opencv
苹果6 小时前
C++二十三种设计模式之迭代器模式
c++·设计模式·迭代器模式
飞yu流星7 小时前
C++ 函数 模板
开发语言·c++·算法
Goldinger8 小时前
vscode 配置c/c++环境 中文乱码
c语言·c++·vscode
nSponge8 小时前
【Duilib】 List控件支持多选和获取选择的多条数据
c++·windows·工具
Y Shy9 小时前
Windows C++开发环境:VSCode + cmake + ninja + msvc (cl.exe) + msys2/bash shell
c++·windows·vscode·msvc·cmake·msys2·ninja
越甲八千9 小时前
详细全面讲解C++中重载、隐藏、覆盖的区别
开发语言·c++
只做开心事10 小时前
C++之闭散列哈希表
c++·哈希算法·散列表
daopuyun11 小时前
C/C++编程安全标准GJB-8114解读——名称、符号与变量使用类
java·c语言·c++