定義:在一個方法中定義一個算法的骨架,算法的每一個實現步驟交給子類去實現,子類能夠在不改變算法骨架的基礎上,從新定義算法中的每個步驟。java
看下來面的類圖你應該能夠很明白了。算法
好比製做服裝的過程是設計、出樣、驗料、排料、裁剪、縫製、鎖眼釘釦、整燙、成衣檢驗、包裝入庫等十個工序,而每一款式的服裝在每一個環節實現是有差別的,那麼這些差別就由特定的子類來實現,超類用一個模板方法定義這十個工序ide
實現:設計
package com.jv.designpattern.templatemethod; public abstract class DressMaking { //該方法就是模板方法,定義整個製做流程的步驟 public void produce() { //設計 design(); //出樣 sampleMaking(); //驗料 checkMaterial(); //排料 distributeMaterial(); //裁剪 tailor(); //更多其餘的方法 } public abstract void design(); public void sampleMaking() { System.out.println("使用標準樣品製做流程生產樣品"); } public void checkMaterial() { System.out.println("驗收物料"); } public void distributeMaterial() { System.out.println("發放物料"); } public abstract void tailor(); //更多其餘的方法 }
package com.jv.designpattern.templatemethod; public class MensDressMaking extends DressMaking { @Override public void design() { //子類決定由誰設計,如何設計 System.out.println("由AA公司負責男裝設計"); } @Override public void tailor() { //子類決定由誰裁剪,如何裁剪 System.out.println("由AB公司負責男裝裁剪"); } }
package com.jv.designpattern.templatemethod; public class WomensDressMaking extends DressMaking { @Override public void design() { //子類決定由誰設計,如何設計 System.out.println("由BB公司負責女裝設計"); } @Override public void tailor() { //子類決定由誰裁剪,如何裁剪 System.out.println("由BA公司負責女裝裁剪"); } }
package com.jv.designpattern.templatemethod; public class TemplateMethodTest { public static void main(String[] args) { DressMaking dm = new MensDressMaking(); dm.produce(); dm = new WomensDressMaking(); dm.produce(); } }