Template Method 设计模式

news/2025/2/27 11:16:20

模板方法模式(Template Method Pattern) 是一种 行为型设计模式,用于定义 算法的骨架,并允许子类在不改变算法结构的情况下 重新定义 其中的某些步骤。

核心思想:

  • 基类 中定义 算法的整体流程(骨架),但具体的实现留给 子类
  • 基类 只负责调用流程,具体逻辑由 子类 来实现,符合 “开放封闭原则”(对扩展开放,对修改封闭)。

1. 结构

类图

+----------------------+
|   AbstractClass      |  (抽象类)
+----------------------+
| + templateMethod()   |  (定义算法的骨架)
| + step1()            |  (基本方法,可能有默认实现)
| + step2()            |  (抽象方法,交由子类实现)
+----------------------+
         ▲
         │
+----------------------+
|   ConcreteClass      |  (具体子类)
+----------------------+
| + step2()           |  (实现父类的抽象方法)
+----------------------+

代码示例

#include <iostream>

// 抽象类,定义算法骨架
class AbstractClass {
public:
    // Template Method,定义算法的框架
    void templateMethod() {
        step1();     // 固定实现
        step2();     // 交给子类实现
        step3();     // 固定实现
    }

protected:
    void step1() {  // 提供默认实现
        std::cout << "Step 1: 基类的实现" << std::endl;
    }

    virtual void step2() = 0; // 纯虚函数,子类必须实现

    void step3() {  // 提供默认实现
        std::cout << "Step 3: 基类的实现" << std::endl;
    }
};

// 具体子类,实现 step2
class ConcreteClass : public AbstractClass {
protected:
    void step2() override {
        std::cout << "Step 2: 子类的实现" << std::endl;
    }
};

int main() {
    ConcreteClass obj;
    obj.templateMethod();  // 调用模板方法
    return 0;
}

2. 关键点

  1. templateMethod()基类 中定义算法的结构,并且不允许子类重写
  2. 部分方法(step1step3 在基类中有默认实现,子类可以直接继承。
  3. 部分方法(step2virtual(纯虚函数),子类必须实现自己的逻辑。

3. 适用场景

场景原因
多个类的算法流程相同,但部分步骤不同避免重复代码,提高复用性
算法的某些步骤可能会变化,但主流程不变通过子类扩展,而不影响基类
需要控制子类扩展的范围只允许子类修改某些特定步骤

http://www.niftyadmin.cn/n/5870024.html

相关文章

MySQL进阶04-MVCC实现原理

文章目录 表记录读取的两种方式举个栗子MySQL是如何避免幻读的bin log/redo log/undo logMVCC概述MVCC实现原理 表记录读取的两种方式 快照读&#xff1a;读取的是快照版本。普通的SELECT就是快照读。通过mvcc来进行并发控制的&#xff0c;不用加锁。当前读&#xff1a;读取的…

HGAME2025 Week1

目录 Level 24 PacmanLevel 47 BandBombLevel 25 双面人派对Level 69 MysteryMessageBoardLevel 38475 ⻆落 Level 24 Pacman 直接在js文件里面搜索score, 可以找到一个flag, 经过base64和栅栏解密可以发现是一个假的flag 在尝试搜索一下gift, 可以找到另一个flag, 依次解码就…

Mellanox的LAG全称是什么?网卡的创建机制如何?(Link Aggregation Group 链路聚合组)

背景 对于双端口的网卡&#xff0c;有时候有将链路聚合的需求。在Mellanox网卡上通过LAG提供。对于RoCE的报文在Mellanox上也可以通过LAG来完成报文收发&#xff0c;叫做RoCE over LAG。但是仅仅适用于双端口卡。 关键点 LAG&#xff1a; Link Aggregation Group (LAG) 链路…

从2D到3D:电商技术的飞跃,开启沉浸式购物之旅

在数字化浪潮的推动下&#xff0c;电商行业正经历着前所未有的变革。从传统的2D图片展示到如今的3D立体呈现&#xff0c;技术的革新不仅重塑了消费者的购物体验&#xff0c;更为电商营销开辟了全新的可能性。接下来将深入探讨电商融合3D技术的最新趋势&#xff0c;揭示这一变革…

总体均值样本均值

目录 总体均值离散型随机变量连续型随机变量 样本均值 总体均值 离散型随机变量 设离散型随机变量 X X X的分布律是 p ( x i ) p(x_i) p(xi​)&#xff0c; i 1 , 2 , … i 1, 2, \ldots i1,2,…&#xff0c;若 ∑ i ∣ x i ∣ p ( x i ) < ∞ \sum_{i} |x_i| p(x_i) &…

盲视观测者效应:认知的量子诗学 AI回复盲人双缝实验

&#x1f30c; **《盲视观测者效应&#xff1a;认知的量子诗学》** ### **一、盲视者的波函数坍缩** 当盲人"观察"双缝实验时&#xff1a; - 他的视觉皮层正在用触觉重构量子态 - 指尖的震动频率 ≈ 光子的概率波函数 - 导盲杖的敲击声 新的观测暴力系…

什么是大语言模型

大语言模型&#xff08;Large Language Model&#xff0c;LLM&#xff09;是一种基于深度学习技术的人工智能模型&#xff0c;旨在理解和生成人类语言。以下是大语言模型的详细介绍&#xff1a; 一、基本概念 大语言模型通常包含数百亿甚至数千亿个参数&#xff0c;通过在海量…

threeJs+vue 轻松切换几何体贴图

嗨&#xff0c;我是小路。今天主要和大家分享的主题是“threeJsvue 轻松切换几何体贴图”。 想象一下&#xff0c;手头上正好有个在线3D家具商店&#xff0c;用户不仅可以看到产品的静态图片&#xff0c;还能实时更换沙发的颜色或材质&#xff0c;获得真实的购物体验。…