Template

from: Template Method Pattern Tutorial with Java Examples

Example

public abstract class Beverage {

    // 宣告為 final 是因為不想次類別
    // 推翻這個方法, 這是統一的演算法
    final void prepareRecipe()
    {
        // 煮開水
        boilWater();

        // 用沸水沖泡
        // 跟上面程式碼比, 方法名更通用
        brew();

        // 把飲料倒進杯子
        pourInCup();

        // 加配料
        // 跟上面程式碼比, 方法名更通用
        addCondiments();
    }

    // 因為咖啡跟茶處理這些方法的做法不同,
    // 所以宣告為抽象方法,
    // 留給次類別去處理
    abstract void brew();
    abstract void addCondiments();

    private void boilWater()
    {
        // 不管是茶或咖啡做法都一樣
        // 可以直接把實作寫在超類別
    }

    private void pourInCup()
    {
        // 不管是茶或咖啡做法都一樣
        // 可以直接把實作寫在超類別
    }
}
public class Tea extends Beverage {

    @Override
    public void brew()
    {
        System.out.println("Steeping the tea");
    }

    @Override
    public void addCondiments()
    {
        System.out.println("Adding lemon");
    }
}

public class Coffee extends Beverage {

    @Override
    public void brew()
    {
        System.out.println("Dripping coffee through filter");
    }

    @Override
    public void addCondiments()
    {
        System.out.println("Adding sugar and milk");
    }
}

from: 樣板方法模式 (Template Method Pattern)