模板方法模式(Template Method Pattern)是一种行为型设计模式,它定义了一个算法骨架,将一些步骤的具体实现延迟到子类中。模板方法模式通过将共同的代码逻辑放在父类中,而将具体的实现细节留给子类来实现,从而实现代码的复用和扩展。
在模板方法模式中,有两类角色:
- 抽象类(Abstract Class):抽象类定义了算法的骨架,其中包含了一系列的抽象方法和具体方法。抽象类中的具体方法可以是抽象方法的默认实现,也可以是一些通用的步骤实现。抽象类中的模板方法用于定义算法的骨架,它调用抽象方法和具体方法来完成算法的执行。
- 具体类(Concrete Class):具体类是抽象类的子类,它实现了抽象类中定义的抽象方法,完成具体的实现细节。
下面是一个示例,展示了模板方法模式的应用:
java
// 抽象类
abstract class AbstractClass {
// 模板方法
public void templateMethod() {
step1();
step2();
step3();
}
// 抽象方法,由子类实现
protected abstract void step1();
// 具体方法,提供默认实现
protected void step2() {
System.out.println("AbstractClass: Step 2");
}
// 抽象方法,由子类实现
protected abstract void step3();
}
// 具体类
class ConcreteClass extends AbstractClass {
@Override
protected void step1() {
System.out.println("ConcreteClass: Step 1");
}
@Override
protected void step3() {
System.out.println("ConcreteClass: Step 3");
}
}
// 客户端代码
public class Main {
public static void main(String[] args) {
AbstractClass abstractClass = new ConcreteClass();
abstractClass.templateMethod();
}
}
在上面的示例中,AbstractClass
是抽象类,定义了一个模板方法 templateMethod()
,它定义了算法的骨架,并调用了抽象方法 step1()
和 step3()
,以及具体方法 step2()
。ConcreteClass
是具体类,它继承了 AbstractClass
并实现了抽象方法 step1()
和 step3()
。在客户端代码中,创建了一个 ConcreteClass
的实例,并调用了模板方法 templateMethod()
,从而完成了算法的执行。
运行上述代码,将会输出以下结果:
ConcreteClass: Step 1
AbstractClass: Step 2
ConcreteClass: Step 3
通过模板方法模式,我们可以将算法的通用部分放在抽象类中,而将具体的实现细节留给子类来实现。这样可以实现代码的复用和扩展,同时还可以避免子类中的代码重复。