模板方法模式通过抽象基类定义算法骨架,用纯虚函数强制子类实现变化步骤,用普通虚函数提供可选钩子,final修饰模板方法防止重写;CRTP可选替代虚函数以提升性能。
模板方法模式在C++中通过抽象基类定义算法骨架,将可变步骤延迟到子类实现——核心是用虚函数(尤其是纯虚)封装变化点,用final修饰模板方法防止重写。
在基类中用public virtual声明模板方法(通常加final),用protected pure virtual声明子类必须实现的步骤,再用protected virtual提供可选重写的钩子函数:
doStep1()、doStep2()
isLoggingEnabled())默认返回false,子类按需覆盖继承抽象类后,只需实现纯虚函数,其余逻辑(如预处理、后置校验、异常包装)由父类统一控制:
super——C++无此语法,靠父类模板方法自动调度override
对性能敏感场景,可用CRTP(奇异递归模板模式)替代虚函数调用,把“子类类型”作为模板参数传入基类:
template class AlgorithmBase 中,用static_cast(this)->stepImpl() 调用AlgorithmBase*统一管理)基本上就这些。模板方法不是为了炫技,而是当多个类共享相同执行流程、仅局部步骤不同时,把它从重复代码里“提出来”——父类管顺序,子类管内容
。