模板方法模式的实现步骤如下:
(1)定义抽象类: 首先,需要定义一个抽象类(或者接口),这个类包含了一个或多个抽象方法(纯虚函数),这些方法在抽象类中没有被实现,需要在子类中实现。同时,这个抽象类还包含一个模板方法,这个方法在抽象类中已经被实现,它调用了那些抽象方法。
(2)实现子类: 然后,需要创建继承自抽象类的子类,并实现那些抽象方法。子类可以重写模板方法,但通常模板方法已经在抽象类中得到了完整的实现,所以子类只需要关注那些抽象方法的实现即可。
(3)使用模板方法: 最后,可以创建子类的实例,并调用模板方法。模板方法会按照其在抽象类中定义的顺序调用那些抽象方法,而这些抽象方法的具体实现则取决于创建的是哪个子类的实例。
如下为样例代码:
#include <iostream>
#include <string>
#include <memory>
class AbstractClass
{
public:
virtual ~AbstractClass() {}
// 模板方法
void templateMethod() {
specificMethod1();
specificMethod2();
}
// 抽象方法,需要在子类中实现
virtual void specificMethod1() = 0;
virtual void specificMethod2() = 0;
};
class ConcreteClass : public AbstractClass
{
public:
// 实现抽象方法
void specificMethod1() override {
std::cout << "ConcreteClass::specificMethod1() " << std::endl;
}
void specificMethod2() override {
std::cout << "ConcreteClass::specificMethod2() " << std::endl;
}
};
int main()
{
std::shared_ptr<ConcreteClass> concreteClass = std::make_shared<ConcreteClass>();
concreteClass->templateMethod(); // 调用模板方法
return 0;
}
上面代码的输出为:
ConcreteClass::specificMethod1()
ConcreteClass::specificMethod2()
上面代码就是在 C++ 中实现模板方法模式的基本步骤。通过这种方式,可以在不改变算法结构的情况下,通过改变子类的实现来改变算法的行为。