定义
定义一个操作中的算法骨架(稳定的),而将一些步骤的实现延迟到子类中(变化的)。模板方法使得子类可以复用一个算法的结构,而只改变(重写)这个算法的特定步骤。
C++实现
class Library {
public:
virtual ~Library() {}
// template method
void run()
{
step1();
step2();
step3();
}
protected:
virtual void step1() = 0;
virtual void step2() = 0;
void step3()
{
// stable method, do something
}
};
class ConcretLibrary : public Library{
protected:
void step1()
{
// do something
}
void step2()
{
// do something
}
};
void main()
{
ConcretLibrary lb;
lb.run();
}
类图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mfIEOksW-1721039195312)(https://i-blog.csdnimg.cn/direct/676bcc6d56fb41649c19b8751f47aad2.png)]
对比类图和C++实现,其中TemplateMethod就是模板方法,它是子类可以复用的算法结构。对于特定步骤step1、step2他们都是变化的,所以延迟到子类进行实现。
总结
- 模板方法是一种非常实用且常见的设计模式,它使用简单的机制(虚函数)为应用程序框架提供了灵活的扩展点。
- 模板方法中被模板方法调用的虚函数可以有具体实现,也可以没有任何实现(纯虚函数),但一般访问权限为protected,因为作为算法的一部分,它没有对外单独开放的必要。