· 尚可 · 工程技术 · 2 分钟阅读
模板方法

功能描述 封装了算法的骨架,让子类去做算法的实现。和建造者模式很像。 代码结构 UML类图 代码示例 假设需要做一份黄金蛋炒饭,鸡蛋和米饭怎么获取,这个由各个厨师自己决定,为了能够做出黄金蛋炒饭,厨师长控制了炒饭的制作步…
功能描述
封装了算法的骨架,让子类去做算法的实现。和建造者模式很像。
代码结构
UML类图

代码示例
假设需要做一份黄金蛋炒饭,鸡蛋和米饭怎么获取,这个由各个厨师自己决定,为了能够做出黄金蛋炒饭,厨师长控制了炒饭的制作步骤…
- 厨师长定义的做黄金蛋炒饭的步骤
public abstract class FriedRice {
abstract void getEgg();
abstract void getRice();
final void doFriedRice(){
System.out.println("准备制作黄金炒饭:先炒米饭,然后倒入鸡蛋液!");
this.getRice();
System.out.println("米饭下锅翻炒...");
this.getEgg();
System.out.println("将鸡蛋液倒入锅中翻炒...");
System.out.println("黄金炒饭制作完成!");
// System.out.println("准备制作普通炒饭:先炒鸡蛋,然后倒入米饭混合炒!");
// this.getEgg();
// System.out.println("将鸡蛋液倒入锅中翻炒...");
//
// this.getRice();
// System.out.println("米饭下锅翻炒...");
//
// System.out.println("普通炒饭制作完成!");
}
}如果改变了步骤,使用同样的原料就可以做出普通蛋炒饭了。
- 厨师通过自己的渠道获取原材料
public class GoldFriedRice extends FriedRice {
@Override
void getEgg() {
System.out.println("从冰箱拿出鸡蛋!");
}
@Override
void getRice() {
System.out.println("从冰箱拿出昨天剩下的米饭!");
}
}- 制作黄金蛋炒饭
public class TestTempMethod {
public static void main(String[] args) {
FriedRice friedRice = new GoldFriedRice();
friedRice.doFriedRice();
}
}
优缺点
优点:复用了代码,封装了不变的部分,将变化的部分延迟到了子类中实现,提高了扩展性。
缺点:使用了抽象类,每个不同的实现都需要一个子类,增加了复杂度。


