模板方法模式

目录

模板方法模式的核心思想

模板方法模式的结构

模板方法模式示例

输出结果

总结


模板方法模式(Template Method Pattern)是一种行为设计模式,它定义了一个操作中的算法骨架,而将一些步骤延迟到子类中实现。模板方法模式使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。

模板方法模式的核心思想

  • 抽象类 :模板方法模式的核心是一个抽象类,该类定义了一个模板方法,这个方法包含了算法的骨架。模板方法通常是final的,以防止子类重写它。

  • 具体步骤:抽象类中定义了一系列抽象方法或钩子(hook),这些方法由子类实现,用于完成算法的具体步骤。

  • 封装不变的部分:模板方法封装了算法的骨架,确保算法结构不变,而具体步骤的实现由子类负责。

模板方法模式的结构

  1. AbstractClass(抽象类):定义了一个模板方法,该方法是一个算法的骨架。它包含了一些抽象方法或钩子,由子类实现。

  2. ConcreteClass(具体类):继承自抽象类,实现抽象方法或钩子,完成算法的具体步骤。

模板方法模式示例

以下是一个简单的C++示例,展示了如何使用模板方法模式实现一个简单的咖啡制作过程。

复制代码
#include <iostream>

// 抽象类:定义算法骨架
class CoffeeMaker {
public:
    // 模板方法:制作咖啡的流程
    void makeCoffee() const {
        boilWater();
        brewCoffee();
        pourInCup();
        addCondiments();
    }

protected:
    // 具体步骤:由子类实现
    virtual void brewCoffee() const = 0;
    virtual void addCondiments() const = 0;

    // 不变的部分:公共步骤
    void boilWater() const {
        std::cout << "烧水" << std::endl;
    }

    void pourInCup() const {
        std::cout << "倒入杯中" << std::endl;
    }
};

// 具体类:实现具体步骤
class SimpleCoffeeMaker : public CoffeeMaker {
protected:
    void brewCoffee() const override {
        std::cout << "冲泡咖啡" << std::endl;
    }

    void addCondiments() const override {
        std::cout << "添加糖和牛奶" << std::endl;
    }
};

class BlackCoffeeMaker : public CoffeeMaker {
protected:
    void brewCoffee() const override {
        std::cout << "冲泡黑咖啡" << std::endl;
    }

    void addCondiments() const override {
        std::cout << "不添加任何调料" << std::endl;
    }
};

int main() {
    SimpleCoffeeMaker simpleCoffeeMaker;
    std::cout << "制作简单咖啡: " << std::endl;
    simpleCoffeeMaker.makeCoffee();
    std::cout << std::endl;

    BlackCoffeeMaker blackCoffeeMaker;
    std::cout << "制作黑咖啡: " << std::endl;
    blackCoffeeMaker.makeCoffee();

    return 0;
}

输出结果

复制代码
制作简单咖啡: 
烧水
冲泡咖啡
倒入杯中
添加糖和牛奶

制作黑咖啡: 
烧水
冲泡黑咖啡
倒入杯中
不添加任何调料

总结

模板方法模式通过定义一个算法的骨架,并允许子类实现其中的具体步骤,实现了代码的复用和扩展。它适用于以下场景:

  • 算法的整体步骤稳定,但某些步骤的具体实现需要灵活变化。
  • 希望子类在不改变算法结构的情况下,重新定义算法的某些步骤。
  • 需要控制子类的扩展,只允许在特定的点进行扩展。

模板方法模式在实际开发中常用于框架设计,如游戏引擎的关卡加载流程、Web框架的请求处理流程等。通过模板方法模式,框架可以提供一个稳定的算法骨架,而具体的实现细节由使用者来决定。

相关推荐
_李小白15 分钟前
【C++学习笔记】新特性之inline变量
c++·笔记·学习
心中有国也有家18 分钟前
hccl 架构拆解:昇腾集合通信库到底在做什么?
人工智能·经验分享·笔记·分布式·算法·架构
桀人36 分钟前
C++——模板初阶(收录在专栏C++入门到精通)
开发语言·c++
一直有一个ac的梦想43 分钟前
cmu15445 2025fall lec 18 transactions with two-phase lock
java·开发语言·数据库
小O的算法实验室1 小时前
2026年MCS,Q-learning增强MOPSO与改进DWA融合算法+复杂三维地形下特定移动机器人动态路径规划
算法
JAVA社区1 小时前
Java进阶全套教程(四)—— SpringMVC框架详解
java·开发语言·spring·面试·职场和发展
Lumbrologist1 小时前
【C++】零基础入门 · 第 2 节:变量、基本数据类型与输入输出
java·开发语言·c++
XX風1 小时前
CMake / Make / Ninja / MSVC / GCC / Clang / MSBuild —— 完整体系化理解
c++
码完就睡1 小时前
C语言——动态内存
c语言·开发语言
xyq20242 小时前
Java 数组
开发语言