1. 程式人生 > >每天學點設計模式之---模板方法模式

每天學點設計模式之---模板方法模式

模板方法模式的定義理解:

模板方法:父類中定義好演算法的的完整執行框架,子類根據自身需求實現具體的演算法步驟;

比如珍珠奶茶的製作流程,可以總結出一套固定的執行流程,

1.先準備一杯清水河一個塑料杯子
2.在準備好的塑料杯中新增珍珠奶茶需要的原料和水混合
3.將準備好的奶茶密封起來,完工了;

上面是總體上的珍珠奶茶的製作完整流程;但是客戶A需要原味的珍珠奶茶,客戶B需要奶香的珍珠的奶茶,
所以具體制作的時候,在第二部中根據客戶的需求新增不同的原料來製作;
這個就是整體制作流程不改變,但是具體做那種味道的,完全是更具需求的變化;

模板方法模式的UML圖


BubbleTea裡面的三個方法對應了奶茶製作的三步流程;
各種奶茶不需要實現全部的流程,只需要製作自己的獨特的味道,實現的定的方法mix();,因為只有這一步有變化;

模板方法模式程式碼實操:

1.首先珍珠奶茶的整體制作:

public abstract class BubbleTea {

    /**
     * 珍珠奶茶的生產步驟,這個步驟無需重新區寫了
     */
    public final void processBubbleTea() {
        // 1.準備好親水和塑料杯
        prepare();
        // 2.新增調料
        mix();
        // 3.製作完成了
        finishTea();
    }

    private void prepare() {
        System.out.println("準備好親水和塑料杯"
); } /** * 原材料種類多樣,這裡不能夠統一實現,所以需要子類看情形一一去實現 */ protected abstract void mix(); private void finishTea() { System.out.println("奶茶密封"); } }

2,各種口味的珍珠奶茶的製作


/**
 * 原味珍珠奶茶
 * 
 * @author shion
 * 
 */
public class A extends BubbleTea {

    @Override
    protected
void mix() { System.out.println("混和了原味的奶茶"); } }
/**
 * 奶香味的珍珠奶茶
 * 
 * @author shion
 * 
 */
public class B extends BubbleTea {

    @Override
    protected void mix() {
        System.out.println("混和了奶香味道的奶茶");

    }

}

3,程式碼實操驗證

public class Test {
    public static void main(String[] args) {
        // 製作原味奶茶
        BubbleTea a = new A();
        a.processBubbleTea();
        System.out.println("******************************");
        // 製作奶香為奶茶
        BubbleTea b = new B();
        b.processBubbleTea();

    }
}

列印如下:

準備好親水和塑料杯
混和了原味的奶茶
奶茶密封
******************************
準備好親水和塑料杯
混和了奶香味道的奶茶
奶茶密封

以上就是我對模板方法模式的理解認識;