模板方法模式通过基类定义算法骨架,将具体步骤延迟到子类实现。1. 基类使用virtual final函数固定流程顺序;2. 纯虚函数强制子类实现核心步骤;3. 普通虚函数提供默认或钩子行为;4. 子类仅重写所需方法;5. 可结合std::function运行时注入逻辑,兼顾继承与组合灵活性。

模板方法模式通过基类定义算法骨架,将具体步骤延迟到子类实现。C++中利用虚函数和模板机制能很好地封装流程,同时保留扩展性。
定义抽象基类封装流程结构
在基类中使用虚函数定义不可重写的模板方法,该方法固定调用顺序,部分步骤由纯虚函数预留子类实现。
- 模板方法声明为 virtual final 防止被覆盖
- 变化的步骤用 纯虚函数 定义接口
- 可选步骤可用普通虚函数提供默认实现
class ProcessTemplate {
public:
virtual void execute() final { // 固定流程
step1();
step2();
if (needStep3()) {
step3();
}
step4();
}
protected:
virtual void step1() = 0; // 必须实现
virtual void step2() = 0;
virtual bool needStep3() { // 钩子函数,可选
return true;
}
virtual void step3() = 0;
virtual void step4() { // 默认空实现
// 可选后处理
}
};子类实现具体步骤
继承基类并实现对应的虚函数,无需关心执行顺序,只需专注逻辑细节。
拍客竞拍系统是一款免费竞拍网站建设软件,任何个人可以下载使用,但未经商业授权不能进行商业活动,程序源代码开源,任何个人和企业可以进行二次开发,但不能以出售和盈利为目的。安装方法,将www文件夹里面的所有文件上传至虚拟主机,在浏览器执行http://你的域名/install.php或者直接导入数据库文件执行。本次升级优化了一下内容1,程序和模板完美分离。2,优化了安装文件。3,后台增加模板切换功能。
- 每个子类可定制不同行为
- 钩子函数控制流程分支
- 避免重复编写流程控制代码
class ConcreteProcess : public ProcessTemplate {
protected:
void step1() override {
// 具体初始化
}
void step2() override {
// 数据处理
}
void step3() override {
// 特殊校验
}
bool needStep3() override {
return false; // 关闭第三步
}
};结合函数对象提升灵活性
对某些步骤支持传入函数对象或lambda,运行时动态指定行为。
立即学习“C++免费学习笔记(深入)”;
```cpp class FlexibleTemplate { std::functionpublic:
explicit FlexibleTemplate(std::function
void execute() final {
step1();
if (customStep) customStep();
step2();
}private: void step1() { / 固定逻辑 / } void step2() { / 固定逻辑 / } };
基本上就这些。通过继承+虚函数定义标准流程,配合钩子和回调,既能统一控制结构,又保持足够的可扩展性。









