1. 程式人生 > 其它 >設計模式-23種設計模式-行為型-模板模式

設計模式-23種設計模式-行為型-模板模式

一、模板模式介紹

二、模板模式引入

UML類圖:

程式碼實現(Java):

//抽象類,表示豆漿
public abstract class SoyaMilk {

    //模板方法, make , 模板方法可以做成final , 不讓子類去覆蓋.
    final void make() {

        select();
        if(customerWantCondiments()) {
            addCondiments();
        }
        soak();
        beat();

    }

    //選材料
void select() { System.out.println("第一步:選擇好的新鮮黃豆 "); } //新增不同的配料, 抽象方法, 子類具體實現 abstract void addCondiments(); //浸泡 void soak() { System.out.println("第三步, 黃豆和配料開始浸泡, 需要3小時 "); } void beat() { System.out.println("第四步:黃豆和配料放到豆漿機去打碎 "); }
//鉤子方法,決定是否需要新增配料 boolean customerWantCondiments() { return true; } }
public class RedBeanSoyaMilk extends SoyaMilk {

    @Override
    void addCondiments() {
        System.out.println(" 加入上好的紅豆 ");
    }

}
public class PeanutSoyaMilk extends SoyaMilk {

    @Override
    void addCondiments() {
        System.out.println(
" 加入上好的花生 "); } }
public class PureSoyaMilk extends SoyaMilk{

    @Override
    void addCondiments() {
        //空實現
    }

    @Override
    boolean customerWantCondiments() {
        return false;
    }

}
public class Client {

    public static void main(String[] args) {
        //製作紅豆豆漿

        System.out.println("----製作紅豆豆漿----");
        SoyaMilk redBeanSoyaMilk = new RedBeanSoyaMilk();
        redBeanSoyaMilk.make();

        System.out.println("----製作花生豆漿----");
        SoyaMilk peanutSoyaMilk = new PeanutSoyaMilk();
        peanutSoyaMilk.make();

        System.out.println("----製作純豆漿----");
        SoyaMilk pureSoyaMilk = new PureSoyaMilk();
        pureSoyaMilk.make();
    }

}

三、模板模式注意事項和細節