1. 简介
模板方法模式是一种行为型设计模式,它定义了一个算法的骨架,将一些步骤延迟到子类中实现。这样,可以在不改变算法结构的情况下,重新定义算法中的某些步骤。
2. 使用条件
模板方法模式适用于以下情况:
算法的结构相同,但具体步骤可能不同;
需要在不同情况下共享相同的算法,但某些步骤的实现可能不同;
不希望子类覆盖整个算法,只能覆盖部分步骤。
3. 示例场景
假设我们要实现一个炒菜的过程,其中包括选菜、洗菜、炒菜、上菜等步骤。不同的菜品在炒菜的步骤和时间上可能有所不同,但整个炒菜的流程是相同的。
4. Java 代码示例
java
abstract class CookDishTemplate {
public final void cookDish() {
selectIngredients();
washIngredients();
fryIngredients();
serveDish();
}
protected abstract void selectIngredients();
protected abstract void washIngredients();
protected abstract void fryIngredients();
protected abstract void serveDish();
}
class CookVegetableDish extends CookDishTemplate {
protected void selectIngredients() {
System.out.println("选择新鲜的蔬菜");
}
protected void washIngredients() {
System.out.println("清洗蔬菜");
}
protected void fryIngredients() {
System.out.println("炒蔬菜");
}
protected void serveDish() {
System.out.println("上菜:蔬菜炒鸡蛋");
}
}
class CookMeatDish extends CookDishTemplate {
protected void selectIngredients() {
System.out.println("选择新鲜的肉类");
}
protected void washIngredients() {
System.out.println("清洗肉类");
}
protected void fryIngredients() {
System.out.println("炒肉类");
}
protected void serveDish() {
System.out.println("上菜:红烧肉");
}
}
public class TemplateMethodPatternExample {
public static void main(String[] args) {
CookDishTemplate vegetableDish = new CookVegetableDish();
CookDishTemplate meatDish = new CookMeatDish();
System.out.println("炒菜流程:");
vegetableDish.cookDish();
System.out.println();
System.out.println("炒肉流程:");
meatDish.cookDish();
}
}
5. 结论
模板方法模式通过定义算法的骨架和具体步骤,实现了代码复用和扩展的便利性。在设计时,应该根据具体情况选择合适的设计模式,以提高代码的可维护性和可扩展性。