設計模式學習筆記(八)—Template Method模式

          Posted on 2007-11-28 20:36 flustar 閱讀(989) 評論(0)  編輯  收藏 所屬分類: Design Patterns

           《設計模式》一書對Template Method模式是這樣描述的:
           定義一個操作中算法的骨架,而將一些步驟延遲到子類中。不改變算法的結構而重新定義它的步驟。
           我的理解:定義一個抽象類或者說接口,在它的內部定義一些抽象的方法(供TemplateMethod調用的步驟)和一個TemplateMethod方法(非抽象方法),封裝了這些抽象方法的接口或抽象類就是骨架。而將它的實現延遲到子類中,也就是用子類實現它。不改變算法的結構而重新定義它的步驟,也就是改寫或者實現父類的這些非TemplateMethod的抽象方法。下面給出一個例子:
          abstract class QueryTemplate{
           public void doQuery(){  //Template Method
            formatConnect();
            formatSelect();
           }
            protected abstract void formatConnect();
            protected abstract void formatSelect();
          }
          class OracleQT extends QueryTemplate{
           public void formatConnect() {
            System.out.println("格式化Qracle數據庫連接");
           }
           public void formatSelect() {
            System.out.println("格式化Oracle數據庫查詢");
           }
          }
          class MysqlQT extends QueryTemplate{
           public void formatConnect() {
            System.out.println("格式化Mysql數據庫連接");
           }
           public void formatSelect() {
            System.out.println("格式化Mysql數據庫查詢");
           }
          }
          public class client {
           public static void main(String[] args) {
            QueryTemplate oracleQT=new OracleQT();
            oracleQT.doQuery();
            
            QueryTemplate mysqlQT=new MysqlQT();
            mysqlQT.doQuery();
           }
          }
          輸出結果:
          格式化Qracle數據庫連接
          格式化Oracle數據庫查詢
          格式化Mysql數據庫連接
          格式化Mysql數據庫查詢
          在這個例子中,我們定義了一個骨架QueryTemplate,在它的內部定義了一個Template Method,和一些步驟(抽象方法),使用Template Method來調用這些步驟。步驟是在子類中實現的。
          小結:有時候,會遇到由一系列步驟構成的過程需要執行。這個過程從高層次上看是相同的,但有些步驟的實現可能不同。正如,查詢SQL數據庫從高層次上看過程是相同的,但某些細節比如如何連接數據庫則可能因平臺等細節的不同而不同。通過Template Method模式,我們可以先定義步驟序列,然后覆蓋那些需要改變的步驟。

           

          posts - 146, comments - 143, trackbacks - 0, articles - 0

          Copyright © flustar

          主站蜘蛛池模板: 南通市| 文成县| 远安县| 手游| 铁岭县| 奉节县| 寿光市| 山丹县| 广昌县| 镇沅| 崇礼县| 揭西县| 朔州市| 巨鹿县| 东山县| 嘉鱼县| 池州市| 贵阳市| 信宜市| 青海省| 安泽县| 简阳市| 云浮市| 奉贤区| 乌拉特前旗| 泸溪县| 龙江县| 彰武县| 于田县| 金溪县| 临潭县| 东海县| 渭源县| 寿宁县| 西乡县| 奎屯市| 屯留县| 平原县| 成武县| 定安县| 中山市|