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

C++ 模板方法模式详解与实例

模板方法模式概念​

模板方法模式(Template Method Pattern)属于行为型设计模式,其核心思想是在一个抽象类中定义一个算法的骨架,而将一些步骤延迟到子类中实现。这样可以使得子类在不改变算法结构的情况下,重新定义算法中的某些步骤。它通过继承机制,实现代码复用和行为扩展,减少重复代码,提升程序的可维护性和扩展性。

模板方法模式结构​

在模板方法模式中,主要包含以下角色:​
抽象类(Abstract Class):定义了模板方法,给出一个算法的骨架,由抽象方法和具体方法组成。抽象方法由子类实现,具体方法则是已经实现好的方法,在模板方法中被调用。​
具体子类(Concrete Class):实现抽象类中的抽象方法,从而完成特定的算法步骤。

需要记住一句话:“你不要调用我,让我来调用你”

实例: 制作不同类型的饮品

我们要制作不同类型的饮品,如咖啡和茶,它们的制作流程相似,都包含煮水、冲泡、倒入杯子等步骤,但冲泡的细节有所不同。我们可以使用模板方法模式来实现这个场景。

#include <iostream>
#include <string>// 抽象类,定义饮品制作的模板方法
class Beverage {
public:// 模板方法,定义饮品制作的算法骨架void prepareRecipe() {boilWater();brew();pourInCup();addCondiments();}protected:// 具体方法,煮水,所有饮品制作都相同void boilWater() {std::cout << "Boiling water" << std::endl;}// 具体方法,倒入杯子,所有饮品制作都相同void pourInCup() {std::cout << "Pouring into cup" << std::endl;}// 抽象方法,冲泡,由子类实现virtual void brew() = 0;// 抽象方法,添加调料,由子类实现virtual void addCondiments() = 0;
};// 具体子类,咖啡
class Coffee : public Beverage {
protected:void brew() override {std::cout << "Brewing coffee grounds" << std::endl;}void addCondiments() override {std::cout << "Adding sugar and milk" << std::endl;}
};// 具体子类,茶
class Tea : public Beverage {
protected
http://www.xdnf.cn/news/4852.html

相关文章:

  • 基于多模态大模型的十二指肠穿孔诊疗技术方案
  • NeurIPS 2024 | 工业质检缺陷检测相关论文梳理
  • el-table中合并表格后横向变高样式无效
  • 找不到自定义包出现报错ModuleNotFoundError: No module named
  • 基础编程题目集 6-9 统计个位数字
  • GAMES202-高质量实时渲染(Assignment 3)
  • Python 爬虫之 XPath 元素定位
  • 熔断机制的实战:高并发下怎么优雅“断电”保命?
  • MAE自监督大模型在医学报告生成中的应用
  • windows的rancherDesktop修改镜像源
  • 【kubernetes】通过Sealos 命令行工具一键部署k8s集群
  • 《盟重冰雪传奇》:战士玩法攻略!
  • day010
  • DJ舞曲音乐系统VIP会员等级在线支付音乐试听音乐下载酒吧电音CMS模块DJ资讯源码
  • 医疗问答检索任务的完整 Pipeline 示例
  • 又双叒叕想盘一下systemd
  • 中小企业设备预测性维护三步构建法:从零到精的技术跃迁与中讯烛龙实践
  • BUUCTF——杂项渗透之1和0的故事
  • 6. 进程控制
  • 基于51单片机的自动洗衣机衣料材质proteus仿真
  • 冯诺依曼体系结构与操作系统
  • 2.6 点云数据存储格式——小结
  • 1128. 等价多米诺骨牌对的数量
  • Python Cookbook-7.7 通过 shelve 修改对象
  • HPLC+HRF双模载波组网过程简析
  • 【嵌入式开发-SDIO】
  • 前端获取流式数据并输出
  • 【Day 22】HarmonyOS车联网开发实战
  • vfrom表单设计器使用事件机制控制字段显示隐藏
  • 算法解密:除自身以外数组的乘积问题详解