<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

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

     

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

    Copyright © flustar

    主站蜘蛛池模板: 羞羞视频免费网站在线看| 国产成人精品日本亚洲网站| 亚洲日产2021三区在线| WWW国产成人免费观看视频| 国产大片91精品免费观看男同| 亚洲jizzjizz在线播放久| 日本高清在线免费| 亚洲国产视频网站| 亚洲视频在线免费播放| 亚洲avav天堂av在线网爱情| 国产一卡2卡3卡4卡2021免费观看 国产一卡2卡3卡4卡无卡免费视频 | 国产精品69白浆在线观看免费| 久久久久亚洲AV无码麻豆| 114级毛片免费观看| 亚洲手机中文字幕| 日日麻批免费40分钟日本的| 亚洲avav天堂av在线网爱情| 日本a级片免费看| 亚美影视免费在线观看| 亚洲av色福利天堂| 免费在线视频你懂的| 亚洲乱理伦片在线观看中字| 国产一卡二卡≡卡四卡免费乱码| 四虎一区二区成人免费影院网址| 亚洲精品第一国产综合精品99| 国产精品福利片免费看| 亚洲国产精品久久久久网站| 国产v精品成人免费视频400条| 色偷偷亚洲第一综合| 亚洲精品无码国产| 91av免费观看| 亚洲AV成人片无码网站| 在线亚洲人成电影网站色www| 久久成人免费电影| 国产亚洲精品bv在线观看| 亚洲国产日韩在线观频| 777成影片免费观看| 久久亚洲精品高潮综合色a片| 亚洲综合国产一区二区三区| 精品熟女少妇a∨免费久久| 亚洲国产成人久久精品软件|