模板方法模式通过在基类中定义算法骨架,将可变步骤延迟到子类实现,确保流程不变的同时支持扩展。

在C++中,模板方法模式(Template Method Pattern)是一种行为型设计模式,它定义了一个算法的骨架,而将一些步骤延迟到子类中实现。模板方法使得子类可以在不改变算法结构的情况下重新定义算法的某些步骤。
模板方法模式的核心是“算法骨架”,它通常是一个在基类中定义的公共方法(通常是protected 或 public 的虚函数或非虚函数),该方法调用一系列抽象或具体的操作来完成整个流程。
这个骨架方法本身不能被子类重写,以保证算法的整体结构不变,但其中调用的某些步骤可以由子类实现或扩展。
典型结构包括:
立即学习“C++免费学习笔记(深入)”;
以下是一个简单的C++示例,展示如何使用模板方法定义一个算法骨架:
#include <iostream>
class Beverage {
public:
// 模板方法:定义算法骨架
void prepare() {
boilWater();
brew();
pourInCup();
if (customerWantsCondiments()) { // 钩子方法控制流程
addCondiments();
}
}
protected:
void boilWater() {
std::cout << "将水煮沸\n";
}
void pourInCup() {
std::cout << "倒入杯中\n";
}
// 抽象方法,由子类实现
virtual void brew() = 0;
virtual void addCondiments() = 0;
// 钩子方法:提供默认行为,子类可覆盖
virtual bool customerWantsCondiments() {
return true;
}
};
class Coffee : public Beverage {
protected:
void brew() override {
std::cout << "用热水冲泡咖啡\n";
}
void addCondiments() override {
std::cout << "加入糖和牛奶\n";
}
bool customerWantsCondiments() override {
return false; // 咖啡不加调料
}
};
class Tea : public Beverage {
protected:
void brew() override {
std::cout << "泡茶包\n";
}
void addCondiments() override {
std::cout << "加入柠檬\n";
}
};
使用模板方法模式定义算法骨架时,需注意以下几点:
基本上就这些。模板方法模式通过封装不变部分、扩展可变部分,实现了代码复用和灵活性的平衡。C++中借助虚函数和继承机制,能自然地支持这种设计。关键是把“算法流程”固定下来,把“具体实现”延迟到子类。不复杂但容易忽略细节。
以上就是C++模板方法模式 算法骨架步骤定义的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号