【31】c++设计模式——>模板方法模式
模板方法模式通常由以下几个部分组成:
1.抽象基类(Abstract Base Class):抽象基类定义了一个算法的骨架,其中包含了模板方法和一些基本操作方法。模板方法在抽象基类中被声明为虚函数,它定义了算法的流程,且不能被子类重写。基本操作方法也在抽象基类中被声明为虚函数,但是可以被子类重写以实现具体的步骤。
2.具体子类(Concrete Subclass):具体子类继承自抽象基类,并实现了抽象基类中的基本操作方法。具体子类可以覆盖基本操作方法以改变算法的行为,但是不能改变模板方法的结构
代码示例
制作咖啡和泡茶的过程都是一致的:煮水->冲泡->导入杯中->添加佐料;两者的制作流程是一致的,差别在于具体的细节。
#include<iostream>
using namespace std;// 抽象基类
class Beverage {
public:// 模板方法,定义了饮料的制作流程void prepare() {boilWater(); //煮水brew(); //冲泡pourInCup(); //导入杯中addCondiments(); //添加佐料}protected:// 基本操作方法,需要在子类中进行具体实现virtual void boilWater() = 0;virtual void brew() = 0;virtual void pourInCup() = 0;virtual void addCondiments() = 0;
};// 具体子类 - 咖啡
class Coffee : public Beverage {
protected:void boilWater() override {std::cout << "Boiling water for coffee." << std::endl;}void brew() override {std::cout << "Brewing coffee grinds." << std::endl;}void pourInCup() override {std::cout << "Pouring coffee into cup." << std::endl;}void addCondiments() override {std::cout << "Adding sugar and milk to coffee." << std::endl;}
};// 具体子类 - 茶
class Tea : public Beverage {
protected:void boilWater() override {std::cout << "Boiling water for tea." << std::endl;}void brew() override {std::cout << "Steeping tea leaves." << std::endl;}void pourInCup() override {std::cout << "Pouring tea into cup." << std::endl;}void addCondiments() override {std::cout << "Adding lemon to tea." << std::endl;}
};int main()
{Coffee *c = new Coffee;c->prepare();cout << "=======================================" << endl;Tea *t = new Tea;t->prepare();
}

相关文章:
【31】c++设计模式——>模板方法模式
模板方法模式通常由以下几个部分组成: 1.抽象基类(Abstract Base Class):抽象基类定义了一个算法的骨架,其中包含了模板方法和一些基本操作方法。模板方法在抽象基类中被声明为虚函数,它定义了算法的流程&…...
docker和K8S环境xxl-job定时任务不执行问题总结
文章目录 xxl-job 任务调度原理1 问题1 时区导致的任务没有执行的问题解决方案 2 执行器注册和下线导致的问题(IP问题)解决方案 3 问题3 调度成功,但是执行器的定时任务未执行4 问题4 数据库性能问题,导致查询任务和操作日志数据卡…...
【Leetcode】218.天际线问题(Hard)
一、题目 1、题目描述 城市的 天际线 是从远处观看该城市中所有建筑物形成的轮廓的外部轮廓。给你所有建筑物的位置和高度,请返回 由这些建筑物形成的 天际线 。 每个建筑物的几何信息由数组 buildings 表示,其中三元组 buildings[i] = [lefti, righti, heighti] 表示: l…...
try catch finally代码块的作用
try-catch-finally 代码块是用于处理程序中可能发生的异常情况的一种结构。它的作用在于: try 代码块中的代码用于包含可能会引发异常的代码。catch 代码块用于捕获并处理 try 代码块中抛出的异常。可以通过 catch 代码块中的逻辑来处理异常,如打印错误…...
【Sentinel】Sentinel簇点链路的形成
说明 一切节点的跟是 machine-root,同一个资源在不同链路会创建多个DefaultNode,但是在全局只会创建一个 ClusterNode machine-root/\/ \EntranceNode1 EntranceNode2/ \/ \DefaultNode(nodeA) DefaultNode(nodeA)|…...
Elasticsearch之mapping
文章目录 以显式的方式创建一个映射查看某个具体索引的mapping定义向已存在的映射中添加一个新的属性查看映射中指定字段的定义信息更新已存在映射的某个字段 1、 官方文档地址 2、 字段类型 1、定义:映射是定义文档及其包含的字段如何存储和索引的过程。 2、每个…...
6、PostgreSQL 数据类型之一:数字类型和货币类型
PostgreSQL 作为一个强大的开源关系型数据库管理系统,本身支持多种数据类型,包括标准 SQL 数据类型以及一些扩展数据类型。 PostgreSQL 支持多种数据类型的设计理念是为了满足不同应用场景的需求,提供更大的灵活性和数据处理能力。原因如下&…...
计算机视觉与深度学习 | 基于点线融合的视觉惯性SLAM前端
===================================================== github:[https://github.com/MichaelBeechan] CSDN:[https://blog.csdn.net/u011344545] ===================================================== 引言 本文中将介绍视觉惯性SLAM的前端部分,首先是传感器数据处理…...
MDK与keilC51共存的方法
MDK与keilC51共存的方法 在网上搜的资料MDK与KeilC51安装顺序都搞反了,而且大家都没成功过,反倒是转发了很多错误的教程。 用此安装方法解决了MDK与KeilC51的共存问题。所有功能完美运行。 因为MDK功能比KeilC51多,所以要先安装KeilC51 1、先…...
c_指针
文章目录 *(p1)1表示第 1 行第 1 个元素的地址。如何理解呢?下标运算符的规则括号 int a; // 1.一个整数 int *a; // 2.一个指向整数的指针 int **a; // 3.一个指向指针的指针, 它所指向的指针又指向一个整数型数据 ;一个指向 …...
循环队列c语言版
一、循环队列结构体 typedef int QueueDataType; #define CQ_MAX_SIZE 10typedef struct CircularQueue {QueueDataType data[CQ_MAX_SIZE];/**标记队列首*/QueueDataType head;/**标记队列尾部*/QueueDataType rear;} CircularQueue; 二、循环队列操作函数声明 /**创建队…...
SprringMVC拦截器
1、拦截器的配置 SpringMVC中的拦截器用于拦截控制器方法的执行 SpringMVC中的拦截器需要实现HandlerInterceptor SpringMVC的拦截器必须在SpringMVC的配置文件中进行配置: <bean class"com.test.interceptor.FirstInterceptor"></bean> …...
redis的实际使用
Redis是一种内存数据库,常用于缓存、会话管理、消息队列等。在项目中合理使用Redis可以提高系统性能和可扩展性。以下是一些使用Redis的建议: 1. 缓存常用数据:将经常使用的数据缓存在Redis中,以减少数据库的读取次数,…...
造车先做三蹦子-之二:自制数据集(5x5数据集)230102
#Jupyter Notebook231001import torch import torch.nn as nn import torch.optim as optim# 定义模型 class Net(nn.Module):def __init__(self):super(Net, self).__init__()self.fc1 = nn.Linear(25, 50)self.fc2 = nn.Linear(50, 6)def forward(self, x):x = x.view(-1, 25…...
JS操作DOM及CSS
JS创造于1994年,其目的是为浏览器显示的文档赋予动态行为。 1 Web编程基础 本节讲解如何编写Web应用中的js程序,如果将这些程序加载到浏览器,以及如何获取输入、产出输出,如何运行响应事件的异步代码。 1.1 js 脚本 虽然现在不…...
Linux内核VFS详解
Linux内核VFS是什么? Linux内核VFS(Virtual File System)是Linux操作系统中的一个关键组件,用于提供文件系统抽象层。它允许用户空间和内核空间的各个部分以一种一致的方式访问不同类型的文件系统,包括磁盘文件系统(如EXT4、XFS、NTFS)、网络文件系统(如NFS、CIFS)、…...
在自己的服务器上部署个人博客和开源项目:实现数字存在感
在数字时代,拥有自己的服务器不再是一项难以实现的任务。通过云计算和开源技术的广泛应用,个人可以轻松地拥有自己的服务器,并在其上部署个人博客以及开源项目,为自己在互联网上创造一个数字存在感。本文将介绍如何在自己的服务器…...
【AI视野·今日Robot 机器人论文速览 第五十九期】Fri, 20 Oct 2023
AI视野今日CS.Robotics 机器人学论文速览 Fri, 20 Oct 2023 Totally 29 papers 👉上期速览✈更多精彩请移步主页 Daily Robotics Papers CCIL: Continuity-based Data Augmentation for Corrective Imitation Learning Authors Liyiming Ke, Yunchu Zhang, Abhay D…...
Chromium浏览器启动参数
文章目录 Chromium浏览器启动参数1. --disable-web-security2. --disable-gpu3. --incognito4. --no-sandbox5. --disable-infobars6. --disable-notifications7. --disable-extensions8. --disable-translate9. --disable-popup-blocking10. --remote-debugging-port=<port…...
【计算机视觉】MoCo v3 讲解
MoCo v3 论文信息 标题:An Empirical Study of Training Self-Supervised Vision Transformers 作者:Xinlei Chen, Saining Xie, Kaiming He 期刊:ICCV 2021 发布时间与更新时间:2021.04.05 2021.04.08 2021.05.05 2021.08.16 主题:计算机视觉、对比学习、MoCo arXiv:[21…...
ClaimsPrincipal序列化为Json的正确姿势
第二步,理解三者的关系 1. Claim:声明的基本单元 职责 表示一个键值对形式的声明(如 "name" "Alice"、"role" "Admin")。不仅包含类型(Type)和值(…...
利用快马AI平台,十分钟快速生成企业网站响应式原型
最近在帮朋友的公司搭建官网,发现传统建站流程实在太耗时——从设计到开发至少一两周起步。尝试用InsCode(快马)平台的AI生成功能后,居然10分钟就搞定了响应式网站原型!分享下这个高效流程: 明确需求框架 企业官网最基础的结构包括…...
OpenCore配置效率工具:从入门到精通的黑苹果EFI管理方案
OpenCore配置效率工具:从入门到精通的黑苹果EFI管理方案 【免费下载链接】OCAuxiliaryTools Cross-platform GUI management tools for OpenCore(OCAT) 项目地址: https://gitcode.com/gh_mirrors/oc/OCAuxiliaryTools 在黑苹果配置领…...
新手零失败安装eNSP指南:用快马AI生成你的专属安装助手
新手零失败安装eNSP指南:用快马AI生成你的专属安装助手 最近在学习网络技术,第一步就是要安装华为的eNSP模拟器。作为一个纯新手,光是看到各种依赖组件就头大了:WinPcap、VirtualBox、Wireshark...更别提安装过程中可能遇到的各种…...
猫抓:网页资源提取工具的全场景应用指南
猫抓:网页资源提取工具的全场景应用指南 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 你是否曾遇到这样的困境:精心策划的…...
终极Zrythm混音教程:从基础到高级的完整工作流程
终极Zrythm混音教程:从基础到高级的完整工作流程 【免费下载链接】zrythm a highly automated and intuitive digital audio workstation - official mirror 项目地址: https://gitcode.com/gh_mirrors/zr/zrythm Zrythm是一款高度自动化且直观的数字音频工作…...
SO(3) (本质理解)
一、SO(3) 是什么 SO(3)(Special Orthogonal Group): 几何理解(非常重要) SO(3) 表示: “刚体绕某个轴旋转一个角度” 任何旋转都可以表示为: 一个单位轴 一个角度 这就是: 轴…...
解锁浏览器超能力:Greasy Fork用户脚本平台完全指南
解锁浏览器超能力:Greasy Fork用户脚本平台完全指南 【免费下载链接】greasyfork An online repository of user scripts. 项目地址: https://gitcode.com/gh_mirrors/gr/greasyfork 认知启蒙:重新认识浏览器脚本的价值 还在为浏览器功能不足烦恼…...
【深度评测】C盘爆满别慌!小番茄C盘清理的五大核心功能实测
1. 为什么你的C盘总是爆满? 每次打开电脑看到C盘飘红,是不是感觉血压都上来了?作为一个常年和磁盘空间斗智斗勇的老司机,我发现C盘爆满的原因远比想象中复杂。系统更新残留、软件缓存堆积、临时文件泛滥...这些"隐形杀手&quo…...
Swift Core ML Stable Diffusion架构设计:打造高性能移动端AI绘画引擎
Swift Core ML Stable Diffusion架构设计:打造高性能移动端AI绘画引擎 【免费下载链接】swift-coreml-diffusers Swift app demonstrating Core ML Stable Diffusion 项目地址: https://gitcode.com/gh_mirrors/sw/swift-coreml-diffusers 想要在iPhone和Mac…...
