C++ 设计模式-模板方法模式

server/2025/2/26 0:43:40/

文件处理

#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.ppmy.cn/server/170644.html

相关文章

UE5网络通信架构解析

文章目录 前言一、客户端-服务器架构&#xff08;C/S Model&#xff09;二、对等网络架构&#xff08;P2P&#xff0c;非原生支持&#xff09;三、混合架构&#xff08;自定义扩展&#xff09;四、UE5网络核心机制 前言 UE5的网络通信主要基于客户端-服务器&#xff08;C/S&am…

KubeSphere平台安装

KubeSphere简介 KubeSphere 是一款功能强大的容器管理平台&#xff0c;以下是其简介&#xff1a; 1&#xff09;基本信息 开源项目&#xff1a;基于 Apache-2.0 授权协议开源&#xff0c;由 Google Go、Groovy、HTML/CSS 和 Shell 等多种编程语言开发。基础架构&#xff1a;…

如何查找 UBuntu的 arm版本

Ubuntu官网 https://ubuntu.com/ 如图&#xff1a; 点击 Tab栏的Download Ubuntu >> Server >> ARM >> 点击Download 24.04.2 LTS 即可 如果需要其他版本 点击 Alternative and previous releases 进入到如下页面选择想要的版本下载即可

【Linux】管道通信——命名管道

文章目录 命名管道什么是命名管道**命名管道 vs. 无名管道**如何创建命名管道 用命名管道实现进程间通信MakefileComm.hppServer.hppClient.hppServer.cppClient.cpp 效果总结 命名管道 什么是命名管道 命名管道&#xff0c;也称为 FIFO&#xff08;First In First Out&#…

PyTorch gather 方法详解:作用、应用场景与示例解析(中英双语)

PyTorch gather 方法详解&#xff1a;作用、应用场景与示例解析 在深度学习和自然语言处理&#xff08;NLP&#xff09;任务中&#xff0c;我们经常需要从高维张量中提取特定索引的数据。 PyTorch 提供的 torch.gather 方法可以高效地从张量的指定维度收集数据&#xff0c;广泛…

Solon Cloud —— 服务网关

说明 Solon Cloud Gateway 是 一个可 Java 编程的分布式网关&#xff0c;提供了服务路由的能力和各种拦截的支持&#xff0c;只要是 http 服务&#xff08;不需要关心实现的语言&#xff09;都可以通过 Solon Cloud Gateway 进行代理转发&#xff0c;代理转发的服务也不一定要…

23. AI-大语言模型-DeepSeek简介

文章目录 前言一、DeepSeek是什么1. 简介2. 产品模式1. 模式2. 版本3. 参数规模与模型能力 3. 特征4. 三种访问方式1. 网页端和APP2. DeepSeek API 二、DeepSeek可以做什么1. 应用场景2. 文本生成1. 文本创作2. 摘要与改写3. 结构化生成 3. 自然语言理解与分析1. 语义分析2. 文…

51单片机-80C51的串行口

目录 1、80C51的串行口 1.1、80C51串行口的控制寄存器 1.2、80C51串行口的工作方式 1.3、波特率的计算 1.4、串口如何使用 2、单片机与单片机的通信 1、80C51的串行口 有两个物理上独立的接收、发送缓冲器SBUF,它们占用同一个地址99H;接收器是双缓冲结构;发送缓冲器,…