每天學點設計模式之---模板方法模式
阿新 • • 發佈:2018-12-30
模板方法模式的定義理解:
模板方法:父類中定義好演算法的的完整執行框架,子類根據自身需求實現具體的演算法步驟;
比如珍珠奶茶的製作流程,可以總結出一套固定的執行流程,
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();
}
}
列印如下:
準備好親水和塑料杯
混和了原味的奶茶
奶茶密封
******************************
準備好親水和塑料杯
混和了奶香味道的奶茶
奶茶密封
以上就是我對模板方法模式的理解認識;