模板模式(Template Pattern)是一种行为设计模式,它在一个方法中定义一个操作的骨架,而将一些步骤的实现延迟到子类中。模板方法模式使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。
模板模式的组成部分
-
抽象类(Abstract Class):
- 定义算法的骨架,并包含一个模板方法。
- 模板方法定义了算法的顺序。
- 抽象类可以包含一些具体方法和一些抽象方法。
-
具体类(Concrete Class):
- 继承自抽象类,实现抽象方法。
- 实现算法中不同的步骤。
例子
以下是一个简单的例子,展示如何使用模板模式来实现不同的烹饪过程:
// 抽象类
abstract class Cooking {
// 模板方法
public final void cook() {
prepareIngredients();
cookDish();
serveDish();
}
// 基本步骤,子类需要实现
protected abstract void prepareIngredients();
protected abstract void cookDish();
// 具体步骤,所有子类共享
protected void serveDish() {
System.out.println("Dish is served.");
}
}
// 具体类1
class PastaCooking extends Cooking {
@Override
protected void prepareIngredients() {
System.out.println("Preparing pasta ingredients.");
}
@Override
protected void cookDish() {
System.out.println("Cooking pasta.");
}
}
// 具体类2
class RiceCooking extends Cooking {
@Override
protected void prepareIngredients() {
System.out.println("Preparing rice ingredients.");
}
@Override
protected void cookDish() {
System.out.println("Cooking rice.");
}
}
// 客户端代码
public class TemplateMethodDemo {
public static void main(String[] args) {
Cooking pasta = new PastaCooking();
pasta.cook();
Cooking rice = new RiceCooking();
rice.cook();
}
}
使用场景
- 多个类有相同的方法,但是实现不同。
- 重要的、复杂的方法可以由多个子类实现,但是子类之间有一些通用行为。
- 希望控制子类的扩展行为而不是完全自由地覆写整个方法。