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

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

相关文章:

  • 从零开始用 AI 编写一个复杂项目的实践方法论
  • 管家婆工贸ERP PB025.MRP生产建议生成调拨单
  • 拦截器(HandlerInterceptor)中获取请求参数
  • 【Dify系列教程重置精品版】第七章:在Dify对话中显示本地图片之FastAPI与Uvicorn
  • 新能源行业Profinet转CanOpen转换:跨越通信鸿沟的桥梁
  • NHANES指标推荐:NfL
  • 【数据结构】01Trie
  • el-table中合并表格后横向变高样式无效
  • 国标GB28181软件EasyGBS雪亮工程打造智能高效的视频监控新体系
  • MySQL锁机制详解!
  • RocketMQ的事务消息机制
  • vue 手机端 封装全局使用的提示框 (vant)
  • YOGA Air X ILL10(83CX)/YOGA 14 ILL10X(83LC)2025款恢复开箱状态原装出厂Win11系统OEM镜像
  • SEMI E40-0200 STANDARD FOR PROCESSING MANAGEMENT(加工管理标准)-(三)完结
  • 【LeetCode 42】接雨水(单调栈、DP、双指针)
  • 深入剖析 I/O 复用之 select 机制
  • C#简易Modbus从站仿真器
  • 2025年排名前十进销存软件大测评
  • Coding Practice,48天强训(32)
  • 【嵌入式开发-IIC】
  • 洲际酒店:今年第一季度全球酒店平均客房收入同比增长3.3%
  • 第32届梅花奖终评启幕,上海京剧院《智取威虎山》满堂彩
  • 印巴冲突升级,巴基斯坦股市重挫7.29%,创5年来最大单日跌幅
  • 国务院安委会办公室印发通知:坚决防范遏制重特大事故发生
  • 外交部:解放军参加红场阅兵体现了中方对历史的尊重和铭记
  • 阿曼宣布美国与胡塞武装达成停火协议