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

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.dtcms.com/a/30185.html

相关文章:

  • 【ROS2】卡尔曼滤波学习:概念、数学推导和C++实现方法
  • 【Linux探索学习】第三十弹——线程互斥与同步(上):深入理解线程保证安全的机制
  • CPU、SOC、MPU、MCU--详细分析四者的区别
  • 【Springboot3】Springboot3 搭建RocketMQ 最简单案例
  • UE5 GamePlay 知识点
  • Powershell Install deepseek
  • 【JavaEE进阶】Spring MVC(4)-图书管理系统案例
  • Python 下载/安装
  • [免费]微信小程序智能商城系统(uniapp+Springboot后端+vue管理端)【论文+源码+SQL脚本】
  • 23.5.1 WebBrowser与网页交互
  • Python爬虫selenium验证-中文识别点选+图片验证码案例
  • Three.js 快速入门教程【六】相机控件 OrbitControls
  • MySql三大范式
  • 2025寒假周报4
  • Frp部署文档
  • 第J3周:DenseNet算法实战与解析
  • 深度优化方法汇总
  • MyBatis是什么
  • 【Python项目】基于Python的语音数据及标注核对审核系统
  • Javascript数组排序
  • Golang深度学习
  • WPF的页面设计和实用功能实现
  • C#调用126邮箱发送邮件及注意事项,(完整源代码)下载
  • 每日一题——字符串变形
  • 如何生成美观且内容稳定的PDF文档:从基础到进阶的全方案解析
  • Datawhale Ollama教程笔记5
  • Rust编程语言入门教程 (七)函数与控制流
  • 什么是LoRA微调
  • SpringBoot详解
  • 使用爬虫按关键字搜索亚马逊商品:实战指南