設計模式 - 模板方法模式
阿新 • • 發佈:2017-06-10
col closed abs concrete style package println -1 san
定義:在一個方法中定義一個算法的骨架,而將一些步驟延遲到子類中。
模板方法使得子類可以在不改變算法結構的情況下,重新定義算法中的某些步驟。
角色:
抽象類(AbstractClass):實現了模板方法,定義了算法的骨架。 具體類(ConcreteClass):實現抽象類中的抽象方法,已完成完整的算法。 代碼示例:抽象類定義了整個從做飯到吃飯最後清理的流程,子類是具體的不同的方式。 抽象類:定義骨架package com.template; public abstract class AbstractEat { // 模板方法裏面定義一連串的步驟 finalView Codevoid eatProcess(){ cook(); eat(); pack(); } abstract void cook(); abstract void eat(); // 共有的相同操作,父類直接實現,不須子類覆蓋 final void pack(){ System.out.println("餐後清理。。。"); } }
具體類:
1、中餐
package com.template; public class ChineseFood extendsView CodeAbstractEat { @Override void cook() { System.out.println("中餐做飯。。。"); } @Override void eat() { System.out.println("中餐吃法。。。"); } }
2、西餐
package com.template; public class WesternFood extends AbstractEat { @Override void cook() { System.out.println(View Code"西餐做飯。。。"); } @Override void eat() { System.out.println("西餐吃法。。。"); } }
測試類:
package com.template; public class TestTemplate { public static void main(String[] args) { AbstractEat c = new ChineseFood(); c.eatProcess(); AbstractEat w = new WesternFood(); w.eatProcess(); } }View Code
總結:
1、模板方法可以提供代碼的復用,把具體實現推遲到子類中。
2、為防止子類覆蓋方法,可以將方法定義為final。
3、模板方法模式和策略模式都可以封裝算法和行為,一個用繼承,一個用組合。
設計模式 - 模板方法模式