当前位置: 首页 > article >正文

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;
}

关键点解析

  1. 抽象基类 DataProcessor

    • 定义模板方法 Process() 作为算法骨架
    • 声明纯虚函数 ProcessData() 作为扩展点
    • 提供通用实现 OpenFile()CloseFile()
  2. 具体子类

    • CsvProcessorJsonProcessor 实现特定数据处理逻辑
    • 只需重写 ProcessData(),无需关心文件操作
  3. 执行流程

    Opening file...
    Processing CSV data...
    Closing file...
    
    Opening file...
    Processing JSON data...
    Closing file...
    

模式优势

  • 代码复用:公共逻辑(文件操作)在基类实现
  • 扩展性:新增数据格式只需继承基类并实现 ProcessData()
  • 符合开闭原则:修改处理逻辑不影响现有代码

http://www.kler.cn/a/557580.html

相关文章:

  • 【Python】Python顺序语句经典题合集
  • java开发——为什么要使用动态代理?
  • hot100_74. 搜索二维矩阵
  • Unity FBXExport导出的FBX无法在Blender打开
  • ZT7 小红的排列构造
  • 【Python爬虫(46)】解锁分布式爬虫:实时数据处理的奥秘
  • 在Django中安装、配置、使用CKEditor5,并将CKEditor5录入的文章展现出来,实现一个简单博客网站的功能
  • 人工智能三剑客:符号主义、连接主义与行为主义的较量与融合
  • RocketMQ事务消息原理
  • 爬虫小案例豆瓣电影top250(json格式)
  • C++如何获取windows系统通知消息列表
  • RoCBert:具有多模态对比预训练的健壮中文BERT
  • 【Qt】可爱的窗口关闭确认弹窗实现
  • Svelte 最新中文文档教程(16)—— Context(上下文)
  • 微信小程序数据绑定与事件处理:打造动态交互体验
  • Ubuntu 22.04 Install deepseek
  • MongoDB应用设计调优
  • My Metronome for Mac v1.4.2 我的节拍器 支持M、Intel芯片
  • 微软CEO-纳德拉访谈-AGI计划
  • RT-Thread+STM32L475VET6——USB鼠标模拟