模板方法模式,它定义了一个算法的骨架,将一些步骤延迟到子类中实现。这个模式允许子类重新定义算法的某些步骤,而不改变算法的结构。通常,模板方法由一个抽象类实现,其中包含算法的基本步骤,并且这些步骤可以是抽象的或具体的。子类继承这个抽象类并重写其中的特定方法,从而定制算法的行为。这种模式常用于实现一个通用的算法框架,以便不同的子类可以根据自身需求实现算法的具体步骤。
1、场景设计
**实现场景:**定义一个模板方法类,并使用它。
2、C++实现
`AbstractClass` 是抽象类,其中包含一个模板方法 `templateMethod()` 和一些抽象方法 `step1()` 和 `step2()`。`ConcreteClass` 是 `AbstractClass` 的具体子类,实现了 `step1()` 和 `step2()` 方法。在 `main()` 函数中,我们创建了 `ConcreteClass` 的一个实例,并调用了 `templateMethod()` 方法,从而触发了模板方法的执行。
cpp
#include <iostream>
//定义模板方法的抽象类
class AbstractClass {
public:
//模板方法
void templateMethod() {
step1();
step2();
step3();
}
//由子类实现的基本操作
virtual void step1() = 0;
virtual void step2() = 0;
//具体操作
void step3() {
std::cout << "AbstractClass: step3\n";
}
};
//实现抽象方法的具体子类
class ConcreteClass : public AbstractClass {
public:
void step1() override {
std::cout << "ConcreteClass: step1\n";
}
void step2() override {
std::cout << "ConcreteClass: step2\n";
}
};
int main() {
ConcreteClass concrete;
concrete.templateMethod();
return 0;
}
3、Java实现
`AbstractClass` 是一个抽象类,其中包含一个模板方法 `templateMethod()` 和一些抽象方法 `step1()` 和 `step2()`。`ConcreteClass` 是 `AbstractClass` 的具体子类,实现了 `step1()` 和 `step2()` 方法。在 `main()` 方法中,我们创建了 `ConcreteClass` 的一个实例,并调用了 `templateMethod()` 方法,从而触发了模板方法的执行。
java
package behavioralpattern.templatemethod;
public class TemplateMethodDemo {
static abstract class AbstractClass {
// 模板方法
public final void templateMethod() {
step1();
step2();
step3();
}
// 由子类实现的基本操作
protected abstract void step1();
protected abstract void step2();
// 具体操作
protected void step3() {
System.out.println("AbstractClass: step3");
}
}
static class ConcreteClass extends AbstractClass {
@Override
protected void step1() {
System.out.println("ConcreteClass: step1");
}
@Override
protected void step2() {
System.out.println("ConcreteClass: step2");
}
}
public static void main(String[] args) {
ConcreteClass concrete = new ConcreteClass();
concrete.templateMethod();
}
}