C++ 模板方法模式详解与实例

发布于:2025-05-09 ⋅ 阅读:(22) ⋅ 点赞:(0)

模板方法模式概念​

模板方法模式(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

网站公告

今日签到

点亮在社区的每一天
去签到