模板方法模式
定义:
定义一个操作中算法的框架,而将一些步骤延迟到子类
优点:
(1)通过派生类覆盖父类的方法来实现反向控制结构
(2)模板方法提供一种代码复用技术
缺点:
(1)需为每一个基本方法实现一个子类,如果父类可变方法多将导致类的个数增加
使用范围:
提供一套算法框架,将具体细节实现步骤延迟到子类
结构:
template_method_pattern:模板抽象类
concrete_template:具体模板类
实现:
namespace behavioral_pattern
{
class template_method_pattern
{
public:
void master()
{
step1();
if (ishook())
{
step2();
}
step3();
}
void step1() { std::cout << "这是具体方法" << std::endl; }
virtual bool ishook() = 0;
virtual void step2() = 0;
virtual void step3() = 0;
};
class concrete_template : public template_method_pattern
{
virtual bool ishook() override
{
std::cout << "这是钩子方法" << std::endl;
return true;
}
virtual void step2() override
{
std::cout << "这是抽象方法step2方法,验证钩子方法" << std::endl;
}
virtual void step3() override
{
std::cout << "这是抽象方法step3方法" << std::endl;
}
};
}
测试:
基于GoogleTest 的单元测试框架;框架可参考如下网址:
https://www.cnblogs.com/jycboy/p/gtest_catalog.html
using namespace behavioral_pattern;
TEST(test_template_method_pattern, success_templete_method)
{
concrete_template concrete;
concrete.master();
}
总结
(1)模板方法模式只用到了继承技术
(2)分别对待抽象方法、钩子方法、具体方法
(3)模板抽象类实现算法框架、具体派生类实现了细节,客户端通过派生类来调用