若是說算法,數據結構是編碼術的層面,那麼設計模式則是編碼中的道。java
模板設計模式,定義一組算法的框架,這些算法的步驟大體相同。而將這些算法中不一樣的步驟延遲到子類中實現。算法
咱們在平常生活中使用的料理機時,先將原材料通過初步處理(打豆漿,須要泡豆子;榨果汁,須要提早將水果洗好),而後打開料理機的蓋子打開,將原材料放進去,打開料理機開關完成粉碎,而後過濾,獲得咱們想要的果汁(或豆漿)。將整個流程抽象:設計模式
我感受本身快變成一個廚師了。數據結構
這三個步驟中的第一個步驟能夠根據材料的不一樣能夠有不一樣的操做,第二,三個步驟就比較固定了。框架
public abstract class DrinkMaker { public final void run() { prepareMaterial(); smash(); filter(); } public abstract void prepareMaterial(); private void smash() { System.out.println("material is smashed!"); } private void filter() { System.out.println("drink is filter out!"); } }
public class SoyBeanMaker extends DrinkMaker { @Override public void prepareMaterial() { prepareSoybean(); } private void prepareSoybean() { System.out.println("soybean is prepared!"); } }
public class FruitJuiceMaker extends DrinkMaker { @Override public void prepareMaterial() { prepareFruit(); } private void prepareFruit() { System.out.println("Fruit is prepared!"); } }
經過上面的UML圖和代碼,能夠看出,模板設計模式,首先在父類中定義了一個流程,規定每一個步驟應該作什麼。子類根據製做飲料的不一樣,準備不一樣的材料(實現父類中定義的第一個抽象步驟)。ide
1,相同的流程只須要定義在父類就能夠,減小了重複代碼。
2,在修改流程時,只須要修改父類的run方法就能夠,不須要對每一個子類修改。ui