文件處理
#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()
- 符合開閉原則:修改處理邏輯不影響現有代碼