大话设计模式之模板方法模式

模板方法模式(Template Method Pattern)是一种行为设计模式,它定义了一个算法的框架,将特定步骤的实现延迟到子类中。模板方法模式通过在父类中定义算法的骨架,而将具体步骤的实现留给子类来完成,从而使子类可以重新定义算法的特定步骤而不改变算法的整体结构。

在模板方法模式中,通常会包含两种角色:

  1. 抽象类(Abstract Class):定义了一个模板方法,其中包含算法的框架和具体步骤的声明,可以包含具体方法、抽象方法或钩子方法。

  2. 具体子类(Concrete Subclass):实现了抽象类中的具体步骤,完成算法的具体实现。

// 抽象类
class AbstractClass {
public:
    // 模板方法
    void templateMethod() {
        step1();
        step2();
        step3();
    }

    // 具体步骤的声明
    virtual void step1() = 0;
    virtual void step2() = 0;
    virtual void step3() = 0;
};

// 具体子类
class ConcreteClass : public AbstractClass {
public:
    void step1() override {
        std::cout << "Step 1" << std::endl;
    }

    void step2() override {
        std::cout << "Step 2" << std::endl;
    }

    void step3() override {
        std::cout << "Step 3" << std::endl;
    }
};

int main(int argc, char *argv[])
{
    ConcreteClass concrete;

    // 使用模板方法
    concrete.templateMethod();


    return 0;
}

/*
在这个示例中,AbstractClass 是抽象类,其中定义了模板方法 templateMethod(),该方法包含了算法的框架和具体步骤的声明。ConcreteClass 是具体子类,它实现了抽象类中的具体步骤。

通过模板方法模式,我们可以在父类中定义算法的整体结构,而将具体实现延迟到子类中。这样可以使得子类可以根据需要重新定义特定步骤,同时保持算法的一致性。
*/

觉得有帮助的话,打赏一下呗。。

           

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/495201.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

用搜索引擎收集信息-常用方式

1&#xff0c;site csdn.net &#xff08;下图表示只在csdn网站里搜索java&#xff09; 2&#xff0c;filetype:pdf &#xff08;表示只检索某pdf文件类型&#xff09; 表示在浏览器里面查找有关java的pdf文件 3&#xff0c;intitle:花花 &#xff08;表示搜索网页标题里面有花…

linux查找指定目录下包含指定字符串文件,包含子目录

linux查找指定目录下包含指定字符串的文件&#xff0c;包含子目录 linux查找指定目录下包含指定字符串的指定文件格式&#xff0c;包含子目录 指定目录 cd /home/www/linux查找指定目录下包含指定字符串的文件&#xff0c;包含子目录 grep -r "指定字符串"注释 gr…

微信开发者工具接入短剧播放器插件

接入短剧播放插线 申请添加插件基础接入app.jsonapp.jsplayerManager.js数据加密跳转到播放器页面运行出错示例小程序页面页面使用的方法小程序输入框绑定申请添加插件 添加插件:登录微信开发者平台 ——> 设置 ——> 第三方设置 ——> 插件管理 ——> 搜索“短剧…

操作系统导论-py2文件修改为py3文件快捷解决方法

在操作系统导论作业中&#xff0c;我们需要用到HW文件。但是这个代码包中&#xff0c;所有.py文件都是py2格式的&#xff0c;需要我们修改为py3文件后运行&#xff0c;即将.py文件开头的 #! /usr/bin/env python 修改为&#xff1a; #! /usr/bin/env python3 在前面小部分文件中…

【快捷部署】010_MySQL(5.7.27)

&#x1f4e3;【快捷部署系列】010期信息 编号选型版本操作系统部署形式部署模式复检时间010MySQL5.7.27Ubuntu 20.04Docker单机2024-03-28 一、快捷部署 #!/bin/bash ################################################################################# # 作者&#xff1a…

idea类已经存在却报错

一句话导读 在idea中导入新的项目&#xff0c;很多类都飘红报错&#xff0c;mvn compile可以通过&#xff0c;可能是因为idea缓存问题导致。 由于这个项目是由老项目复制过来后&#xff0c;再继续开发新的功能&#xff0c;很多同事导入后&#xff0c;都爆出新的类找不到。而编译…

正弦实时数据库(SinRTDB)的使用(4)-快照查询

前文已经将松果实时数据库的安装、创建点表、创建测点、接入OPC DA的数据进行了介绍&#xff0c;没有了解的可以先看如下博客&#xff1a; 正弦实时数据库(SinRTDB)的安装 正弦实时数据库(SinRTDB)的使用(1)-使用数据发生器写入数据 正弦实时数据库(SinRTDB)的使用(2)-接入O…

【吊打面试官系列】Redis篇 -怎么测试 Redis 的连通性?

大家好&#xff0c;我是锋哥。今天分享关于 【怎么测试 Redis 的连通性&#xff1f;】面试题&#xff0c;希望对大家有帮助&#xff1b; 怎么测试 Redis 的连通性&#xff1f; 使用 ping 命令。 要测试Redis的连通性&#xff0c;可以使用redis-cli命令行工具或编写代码。以下是…

Docker 哲学 - Dockerfile 指令

Dockerfile 的 entrypoint 和 cmd 书写方式一样吗&#xff0c;分别用一个node项目的 demo来举例 Dockerfile 的 entrypoint 、cmd 有什么区别&#xff0c;分别举例他们同时出现的场景和 单独出现的场景 entrypoint 和 cmd 命令&#xff1a; 同时出现&#xff1a; 1、cmd 作为 e…

格式化危机!教你轻松恢复数据!

一、遭遇格式化&#xff0c;数据恢复并非难事 当存储设备遭遇格式化后&#xff0c;许多人可能会陷入恐慌&#xff0c;担心重要数据一去不复返。但实际上&#xff0c;数据恢复并非如想象中那般困难。格式化操作主要清除了文件系统的索引信息&#xff0c;而实际的数据往往还残留…

[STM32] Keil 创建 HAL 库的工程模板

Keil 创建 HAL 库的工程模板 跟着100ASK_STM32F103_MINI用户手册V1.1.pdf的第7章步骤进行Keil工程的创建。 文章目录 1 创建相关文件夹2 创建“main.c/h”和“stm32f1xx_clk.c/h”3 复制CMSIS和HAL库4 创建新的Keil工程5 添加组文件夹和工程文件6 配置Keil设置 1 创建相关文件…

Ollama使用

当前各种大模型层出不穷&#xff0c;但想要在本地运行起来一个大模型还是有一定门槛的。 并且模型众多&#xff0c; 每个模型都有自己不同的配置和使用方法&#xff0c;使用非常不便。 Ollama就是一个非常好的工具&#xff0c; 可以让你方便在本地运行各种大模型。 1 安装 支…

【前端学习——js篇】11.元素可见区域

具体见&#xff1a;https://github.com/febobo/web-interview 11.元素可见区域 ①offsetTop、scrollTop offsetTop&#xff0c;元素的上外边框至包含元素的上内边框之间的像素距离&#xff0c;其他offset属性如下图所示&#xff1a; 下面再来了解下clientWidth、clientHeight…

报错there is no HDFS_NAMENODE_USER defined

在Hadoop安装目录下找到sbin文件夹&#xff0c;修改里面的四个文件 1、对于start-dfs.sh和stop-dfs.sh文件&#xff0c;添加下列参数&#xff1a; HDFS_DATANODE_USERroot HDFS_DATANODE_SECURE_USERhdfs HDFS_NAMENODE_USERroot HDFS_SECONDARYNAMENODE_USERroot 2、对于st…

云贝教育 |【技术文章】pg_bulkload介绍

注: 本文为云贝教育 刘峰 原创&#xff0c;请尊重知识产权&#xff0c;转发请注明出处&#xff0c;不接受任何抄袭、演绎和未经注明出处的转载。 pg_bulkload 是一个高性能的数据加载工具&#xff0c;专门为PostgreSQL数据库设计&#xff0c;用于大批量数据的快速导入。pg_bulk…

【YOLOV5 入门】——detect.py简单解析模型检测基于torch.hub的检测方法

声明&#xff1a;笔记是毕设时根据B站博主视频学习时自己编写&#xff0c;请勿随意转载&#xff01; 一、打开detect.py&#xff08;文件解析&#xff09; 打开上节桌面创建的yolov5-7.0文件夹里的detect.py文件&#xff08;up主使用的是VScode&#xff0c;我这里使用pycharm…

电商数据采集平台兼具海量采集国内淘系京东国外LAZADA亚马逊阿里巴巴等平台数据采集

很多的电商数据采集API接口可以使用国内电商平台淘系、京东的行业数据&#xff0c;境外Lazada等平台的行业数据&#xff0c;以及各类直播电商数据等&#xff0c;相对淘数据来说&#xff0c;平台更多一些&#xff0c;但是价格也比较贵&#xff0c;一般是按照行业下类目来销售的&…

华为耳机快速配对新设备,一招搞定

耳机现在已经是我们形影不离的随身设备&#xff0c;如果我们碰见华为手机或平板无法连接或连接不上华为耳机&#xff08;如FreeBuds、FreeLace系列及FreeClip蓝牙耳机&#xff09;的问题&#xff0c;其实很简单&#xff0c;今天分享一个小妙招&#xff0c;帮助我们快速解决这个…

ConcurrentHashMap 是如何保证并发安全的

ConcurrentHashMap JDK1.7 ConcurrentHashMap 是如何保证并发安全的&#xff1f;使用分段锁的概念&#xff1a; 例如这张图&#xff0c;共有 256 个槽位&#xff0c;如果整个哈希表用一把锁&#xff0c;势必性能低下 如果256个槽位&#xff0c;每个槽位都有一把锁&#xff0…

懒人方法|(一)分享:NHANES数据库怎么下载整理

1.前言 继前面孟德尔随机化的代码分享&#xff0c;应粉丝要求出一篇关于NHANES数据库的数据整理入门教程 前面MR代码&#xff1a;全代码分享&#xff5c;R语言孟德尔随机化怎么做&#xff1f;TwoSampleMR包MR一套标准流程 2.数据库界面 NHANES&#xff08;National Health …