模板方法模式
模板方法模式(Template Method Pattern)是一种行为设计模式,它定义了一个算法的骨架,并允许子类在不改变算法结构的情况下重写算法的某些步骤。通过这种模式,能够复用算法的整体流程,同时又能够灵活调整某些具体步骤的实现。
模板方法模式的关键要素
- 抽象类(Abstract Class): 定义了算法的骨架,包含一个模板方法(Template Method),该方法中定义了一系列步骤。某些步骤可以由抽象方法(Abstract Method)来表示,这些方法由子类实现。
- 模板方法(Template Method): 这是在抽象类中定义的一个具体方法,它按某个顺序调用抽象方法和其他具体方法来完成算法的执行流程。
- 具体子类(Concrete Class): 子类继承自抽象类,并实现其中的抽象方法,具体化算法中的某些步骤。
模板方法模式的示例
假设我们要制作一杯饮料,制作饮料的过程是一个固定的流程,但具体的步骤可能会因饮料类型而有所不同。我们可以使用模板方法模式来实现。
// 抽象类
abstract class Beverage {
// 模板方法
public final void prepareRecipe() {
boilWater();
brew();
pourInCup();
addCondiments();
}
// 具体方法
void boilWater() {
System.out.println("烧开水");
}
// 抽象方法
abstract void brew();
abstract void addCondiments();
// 具体方法
void pourInCup() {
System.out.println("倒入杯中");
}
}
// 具体子类
public class Coffee extends Beverage{
@Override
void brew() {
System.out.println("过滤咖啡");
}
@Override
void addCondiments() {
System.out.println("添加糖和牛奶");
}
}
// 具体子类
public class Tea extends Beverage {
@Override
void brew() {
System.out.println("泡茶");
}
@Override
void addCondiments() {
System.out.println("添加柠檬");
}
}
//test
public class TestTemplateMethodPattern {
public static void main(String[] args) {
System.out.println("制作咖啡:");
Beverage coffee = new Coffee();
coffee.prepareRecipe();
System.out.println("-------------------");
System.out.println("制作茶:");
Beverage tea = new Tea();
tea.prepareRecipe();
}
}
模板方法模式的优点
- 代码复用:通过定义模板方法,避免了在多个子类中重复编写相同的算法步骤。
- 易于扩展:新的子类可以不改变现有代码的情况下通过继承并实现新的方法,扩展算法的步骤。
- 控制流程:通过模板方法,父类可以控制子类的行为,确保算法步骤按规定的顺序执行。
模板方法模式的缺点
- 增加类数量:每个具体实现都需要一个新的子类,可能会导致类的数量增多,增加系统的复杂性。
- 实现不够灵活:父类中对算法步骤的固定顺序限制了子类对流程的灵活性。
适用场景
- 当你希望子类可以定制算法的某些步骤,而算法的整体结构在多个子类中是通用时。
- 当多个类中有相似的操作步骤,但具体实现细节不同,且需要遵循固定的步骤顺序时。
模板方法模式是一种强大的设计模式,在需要复用算法结构而允许部分步骤变化的场景下非常适用。
标签:子类,void,模式,算法,println,方法,模板 From: https://www.cnblogs.com/20lxj666/p/18396287