突破编程_C++_设计模式(模板方法模式)-2 模板方法模式的实现步骤

时间:2024-03-15 13:57:42

模板方法模式的实现步骤如下:

(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++ 中实现模板方法模式的基本步骤。通过这种方式,可以在不改变算法结构的情况下,通过改变子类的实现来改变算法的行为。