22、模板方法模式(Template Method)

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

特点:

1、定义算法框架:在父类中定义了算法的结构,子类负责实现具体的步骤。
2、代码复用:共享算法的公共部分,避免代码重复。
3、灵活性:允许子类重写部分步骤,增强灵活性。

适用场景:

1、当一个算法的整体结构不变,但某些步骤可以由子类实现时。
2、需要控制子类的扩展时。

示例:

假设有一个制作饮料的流程,包含“煮水”、“泡茶”或“泡咖啡”等步骤。

//g++ -o test main.cpp 
#include <iostream>

class CaffeineBeverage {
public:
    // 模板方法
    void prepareRecipe() {
        boilWater();
        brew();
        pourInCup();
        addCondiments();
    }

protected:
    virtual void brew() = 0; // 抽象方法,由子类实现
    virtual void addCondiments() = 0; // 抽象方法,由子类实现

    void boilWater() {
        std::cout << "Boiling water" << std::endl;
    }

    void pourInCup() {
        std::cout << "Pouring into cup" << std::endl;
    }
};

class Tea : public CaffeineBeverage {
protected:
    void brew() override {
        std::cout << "Steeping the tea" << std::endl;
    }

    void addCondiments() override {
        std::cout << "Adding lemon" << std::endl;
    }
};

class Coffee : public CaffeineBeverage {
protected:
    void brew() override {
        std::cout << "Dripping coffee through filter" << std::endl;
    }

    void addCondiments() override {
        std::cout << "Adding sugar and milk" << std::endl;
    }
};

int main() {
    CaffeineBeverage* tea = new Tea();
    tea->prepareRecipe();

    CaffeineBeverage* coffee = new Coffee();
    coffee->prepareRecipe();

    delete tea;
    delete coffee;
    return 0;
}

在这个例子中,CaffeineBeverage 类定义了一个制作饮料的模板方法 prepareRecipe(),并在其中调用了一些基本步骤。具体的冲泡和调味步骤由 Tea 和 Coffee 子类实现,从而实现了代码的复用和灵活性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值