模板方法模式:
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。Te m p l a t e M e t h o d 使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
UML图:
示例:
在星巴兹有泡咖啡和泡茶两种饮料
他们的泡制方法如下:
看一下解析的类图:
具体代码:
package com.lwf.templatemethod;
public abstract class CoffeineBeverage {
//模板方法:声明为final是不想子类覆盖
final void prepareRecipe(){
boilWater();//煮水
brew();//用沸水泡
pourInCup();//把泡好的饮料倒进杯子里
addCondiments();//加调味料
}
abstract void brew();
abstract void addCondiments();
void boilWater(){
System.out.println("boil Water");
}
void pourInCup(){
System.out.println("Pouring into cup");
}
}
package com.lwf.templatemethod;
public class Tea extends CoffeineBeverage {
@Override
void addCondiments() {
System.out.println("add lemon");
}
@Override
void brew() {
System.out.println("tea brew");
}
}
package com.lwf.templatemethod;
public class Coffee extends CoffeineBeverage {
@Override
void addCondiments() {
System.out.println("add suger");
}
@Override
void brew() {
System.out.println("coffee brew");
}
}
这里区分一下模板方法, 工厂方法与策略
模板方法: 是由子类决定如何实现算法中的步骤
工厂方法: 是由子类决定实例化哪个具体的类
策略: 封装可互换的行为,然后使用委托来决定要采用哪一个行为