C++ 设计模式-模板方法模式
文件处理
#include <iostream>
// 抽象基类:定义模板方法和抽象步骤
class DataProcessor {
public:
// 模板方法(固定流程)
void Process() {
OpenFile();
ProcessData(); // 由子类实现
CloseFile();
}
protected:
virtual void ProcessData() = 0; // 纯虚函数:子类必须实现
void OpenFile() { std::cout << "Opening file..." << std::endl; }
void CloseFile() { std::cout << "Closing file..." << std::endl; }
};
// 具体子类:CSV 数据处理
class CsvProcessor : public DataProcessor {
protected:
void ProcessData() override {
std::cout << "Processing CSV data: Parsing comma-separated values" << std::endl;
}
};
// 具体子类:JSON 数据处理
class JsonProcessor : public DataProcessor {
protected:
void ProcessData() override {
std::cout << "Processing JSON data: Parsing key-value pairs" << std::endl;
}
};
// 使用示例
int main() {
DataProcessor* csv = new CsvProcessor();
csv->Process(); // 输出 CSV 处理流程
delete csv;
DataProcessor* json = new JsonProcessor();
json->Process(); // 输出 JSON 处理流程
delete json;
return 0;
}
关键点解析:
-
抽象基类
DataProcessor
:- 定义模板方法
Process()
作为算法骨架 - 声明纯虚函数
ProcessData()
作为扩展点 - 提供通用实现
OpenFile()
和CloseFile()
- 定义模板方法
-
具体子类:
CsvProcessor
和JsonProcessor
实现特定数据处理逻辑- 只需重写
ProcessData()
,无需关心文件操作
-
执行流程:
Opening file... Processing CSV data... Closing file... Opening file... Processing JSON data... Closing file...
模式优势:
- 代码复用:公共逻辑(文件操作)在基类实现
- 扩展性:新增数据格式只需继承基类并实现
ProcessData()
- 符合开闭原则:修改处理逻辑不影响现有代码