1. 模式概述
模板方法模式(Template Method)的核心思想是:
- 在基类中定义算法骨架(固定执行顺序)
- 将可变步骤延迟到子类实现
- 通过钩子函数支持流程扩展
在 Qt 软件中,这种模式非常适合"流程固定、步骤可变"的业务,例如:
- 页面刷新流程
- 配置加载流程
- 通知前后资源控制流程
2. 设计原则
本模块仅体现模板方法模式的通用原则,不依赖任何具体业务:
- 在基类中固化执行顺序
- 通过抽象步骤暴露可变点
- 通过钩子函数支持轻量扩展
- 将错误处理与状态回收纳入统一流程
3. 模块结构
modules/template_method_module/template_method_module.hmodules/template_method_module/template_method_module.cppmodules/template_method_module/example_usage.cpp
4. 核心类说明
4.1 TemplateProcessModule
通用模板基类,定义固定算法骨架:
run():流程入口(固定顺序)beforeProcess():前置步骤钩子doProcessCore():核心步骤(纯虚函数)afterProcess(bool success):后置步骤钩子onProcessError(...):错误处理钩子
4.2 GuardedActionTemplateProcess
模板子类(资源守卫版本):
- 执行前禁用/加锁资源
- 执行核心动作(
CoreAction) - 执行后恢复/解锁资源
4.3 IExclusiveWidgetController
互斥控件控制接口,可适配任意资源控制器。
4.4 SingleWidgetController
示例控制器,直接对单个 QWidget 做 setDisabled(true/false)。
5. 使用步骤
- 引入头文件
- 继承
TemplateProcessModule并实现doProcessCore() - 按需重写
beforeProcess()/afterProcess() - 调用
run()执行固定流程
示例:
class DemoTemplateProcess : public template_method_module::TemplateProcessModule {
protected:
bool beforeProcess() override { return true; }
bool doProcessCore() override
{
// 核心业务
return true;
}
void afterProcess(bool success) override
{
Q_UNUSED(success);
}
};
6. 场景化用法(通用资源守卫)
template_method_module::SingleWidgetController controller(targetWidget);
template_method_module::GuardedActionTemplateProcess process(&controller);
process.setCoreAction([]() {
// 执行核心业务动作
});
const bool ok = process.run();
7. 延申与拓展
你可以基于此模块快速构建以下扩展能力:
- 重试模板:在
doProcessCore()中封装重试与退避策略 - 指标模板:在
beforeProcess()/afterProcess()中统计耗时、成功率 - 事务模板:在前后钩子中执行 begin/commit/rollback
- 策略组合:将核心动作改为可替换策略对象
- 异步模板:将核心步骤放入线程池,后置钩子回收资源
示例(重试模板思路):
class RetryableTemplateProcess : public template_method_module::TemplateProcessModule {
protected:
bool doProcessCore() override
{
// 多次尝试核心动作
return true;
}
};
8. 工程接入
将模块文件加入 .pro:
SOURCES += \
modules/template_method_module/template_method_module.cpp
HEADERS += \
modules/template_method_module/template_method_module.h
9. 设计收益
- 将"流程控制"和"业务实现"解耦
- 减少重复代码,统一执行入口
- 子类扩展更安全,不易破坏流程顺序
- 更利于测试和维护
- 便于形成团队级流程规范与可复用组件