模板方法模式:定义一个算法中的操作框架,而将一些步骤延迟到子类中。使得子类可以不改变算法的结构即可重定义该算法的某些特定步骤。
模板方法模式的适用场景:
- 多个子类有逻辑相同的共有方法。
- 可以明确操作步骤的算法。
- 有相同的代码需要重构时。
模板方法模式组件:
- AbstractTemplate(抽象模板角色):定义了一系列的方法,提供一个操作的模板
- ConcreteTemplate(具体模板角色):实现抽象模板中的方法
模板方法模式组件示例:
抽象模板角色:
public abstract class HotDrinks {
protected final void makeHotDrink() {
boilWater();
brewDrinks();
pourInCup();
addSpices();
}
protected final void boilWater() {
System.out.println("Boiling water");
}
protected abstract void brewDrinks();
protected final void pourInCup() {
System.out.println("Pouring into cup");
}
protected abstract void addSpices();
}
具体模板角色:
public class MilkCoffee extends HotDrinks {
@Override
protected void brewDrinks() {
System.out.println("Dripping Coffee through filter");
}
@Override
protected void addSpices() {
System.out.println("Pour milk into the coffee");
}
}
public class Tea extends HotDrinks {
@Override
protected void brewDrinks() {
System.out.println("Steeping the tea");
}
@Override
protected void addSpices() {
System.out.println("Adding lemon");
}
}
模板方法模式总结:
- 封装不变部分,扩展可变部分
- 提取公共代码,便于维护
- 行为由父类控制,子类实现
- 每一个不同的实现都需要一个子类来实现,导致类的个数增加,使得系统更加庞大
来源:oschina
链接:https://my.oschina.net/u/3057088/blog/4784154