c++ 设计原则 - 单一职责原则

C++ 中的单一职责原则(Single Responsibility Principle,SRP)是SOLID设计原则中的一部分,它指出一个类应该只有一个引起变化的原因。换句话说,一个类应该只负责一项工作。

通过一个文件操作类 说明

#include 
#include 
#include 

// 文件读取类
class FileReader 
{
public:
    std::string read(const std::string& filename) 
    {
        std::string content;
        std::ifstream file(filename);
        if (file.is_open()) 
        {
            std::string line;
            while (std::getline(file, line)) 
            {
                content += line + "\n";
            }
            file.close();
        }
        return content;
    }
};

// 文件写入类
class FileWriter 
{
public:
    void write(const std::string& filename, const std::string& content)
     {
        std::ofstream file(filename);
        if (file.is_open()) 
        {
            file << content;
            file.close();
        }
    }
};

int main() 
{
    FileReader reader;
    std::string data = reader.read("test.txt");
    std::cout << "read data: " << data << std::endl;

    FileWriter writer;
    writer.write("output.txt", "this is an example of writing to a file.");

    return 0;
}

我们将文件的读取和写入操作分别封装在 FileReader 和 FileWriter 两个类中。这样,每个类都只有一个明确定义的职责,分别负责文件的读取和写入操作。

设计遵循单一职责原则:每个类只负责一项工作,当需求发生变化时,只需要修改对应的类,而无需影响其他类。这样的设计可以提高代码的可维护性和可扩展性。


当需求发生变化时,根据单一职责原则的设计,我们可以针对不同的需求独立地扩展或修改相应的类,而不会影响其他部分的代码。

场景一:添加对文件压缩的支持
假设现在需要对读取和写入的文件进行压缩处理。根据单一职责原则,我们可以创建一个新的类 FileCompressor,负责文件的压缩和解压操作。然后,在需要的地方调用 FileCompressor 的方法进行压缩和解压操作,这样就实现了功能的扩展,并且不会影响到原有的文件读取和写入类。

class FileCompressor 
{
public:
    std::string compress(const std::string& filename) 
    {
        // 压缩文件的具体实现
    }

    void decompress(const std::string& filename) 
    {
        // 解压文件的具体实现
    }
};

// 在需要的地方使用 FileCompressor 进行压缩和解压操作

场景二:添加日志记录功能
另一个需求可能是添加日志记录功能,以便跟踪文件读取和写入的操作。根据单一职责原则,我们可以创建一个新的类 FileLogger,负责记录文件操作相关的日志信息。然后,在需要的地方调用 FileLogger 的方法进行日志记录,这样就实现了功能的扩展,同样也不会影响到原有的文件读取和写入类。

class FileLogger 
{
public:
    void log(const int level, const std::string& message) 
    {
        // 记录日志的具体实现
    }
};

// 在需要的地方使用 FileLogger 进行日志记录

通过以上的两个场景,我们可以看到,根据单一职责原则的设计,当需求发生变化时,我们可以独立地扩展或修改相应的类,而不会对其他部分的代码造成影响。这样的设计使得代码更加灵活和易于维护。

你可能感兴趣的:(C/C++,c++,单一职责原则,vscode,vs)