C++如何使用模板方法模式封装流程

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

C++如何使用模板方法模式封装流程

模板方法模式通过基类定义算法骨架,将具体步骤延迟到子类实现。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() {              // 默认空实现         // 可选后处理     } };

子类实现具体步骤

继承基类并实现对应的虚函数,无需关心执行顺序,只需专注逻辑细节。

C++如何使用模板方法模式封装流程

笔魂AI

笔魂ai绘画-在线AI绘画、AI画图、AI设计工具软件

C++如何使用模板方法模式封装流程258

查看详情 C++如何使用模板方法模式封装流程

  • 每个子类可定制不同行为
  • 钩子函数控制流程分支
  • 避免重复编写流程控制代码

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::function customStep;

public: explicit FlexibleTemplate(std::function<void()> fn) : customStep(std::move(fn)) {}

void execute() final {     step1();     if (customStep) customStep();     step2(); }

private: void step1() { / 固定逻辑 / } void step2() { / 固定逻辑 / } };

  基本上就这些。通过继承+虚函数定义标准流程,配合钩子和回调,既能统一控制结构,又保持足够的可扩展性。

c++ 封装 子类 void Lambda 继承 虚函数 纯虚函数 接口 class public private function 对象 算法

上一篇
下一篇