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

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

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

    細(xì)心!用心!耐心!

    吾非文人,乃市井一俗人也,讀百卷書,跨江河千里,故申城一游; 一兩滴辛酸,三四年學(xué)業(yè),五六點粗墨,七八筆買賣,九十道人情。

    BlogJava 聯(lián)系 聚合 管理
      1 Posts :: 196 Stories :: 10 Comments :: 0 Trackbacks
    不要將設(shè)計模式想得高不可攀,好像高手才會使用的東西,事實上如果您在下手程式之前,能稍稍對程式作個分析規(guī)劃,或多或少都會用到一些模式了,模式不是教條,它只是前人的經(jīng)驗成果,而 Gof 的書則是擇前人之精華持續(xù)改進(jìn)而來罷了。

    Template Method模式就是一個很簡單的模式,但可能是使用最廣泛的模式,也許您也一直在使用這樣的模式,看它的 UML 類別結(jié)構(gòu)圖就知道了:
    TemplateMethod

    僅僅是抽象類別與具體類別實作的關(guān)係而已,有些人常問抽象類別與介面的區(qū)別為何,Template Method模式可以提供其中一個答案,例如:
    • AbstractClass.java
    public abstract class AbstractClass { 
    public void templateMethod() {
    // step by step template to solve something
    // implementor should follow those step
    opStep1();
    opStep2();
    opStep3();
    }

    public abstract void opStep1();
    public abstract void opStep2();
    public abstract void opStep3();
    }

    • ConcreteClass.java
    public class ConcreteClass extends AbstractClass { 
    public abstract void opStep1() {
    // implement the real operation
    }

    public abstract void opStep2() {
    // implement the real operation
    }

    public abstract void opStep3() {
    // implement the real operation
    }
    }

    對於一些程式而言,我們希望規(guī)定一些處理的步驟、流程或骨架,就像是上例中的step1到step3一樣,至於流程中的step1到step3如何實作並不規(guī)定,而留給實作的人自行決定,這就是Template Method模式的目的。

    抽象類別與介面的差別之一,也正在於抽象類別可以先實作其中一些方法,而介面則是完全僅規(guī)定接口,使用Template Method模式就可以看出兩者之間在應(yīng)用上的一個差別。

    僅以step1到step3這樣的操作來看Template Method模式,似乎彰顯示不出其實作骨架,而將實作部份留待子類的實用性,在 Gof 書中所舉的例子是與 Factory Method 模式結(jié)合的一個例子;通常開啟一個檔案的流程是相似的,例如文字檔或二進(jìn)位檔,不外乎檢查檔案是否可開啟、讀取檔案、設(shè)定顯示等流程,可以使用 Template Method模式來規(guī)範(fàn)這個流程: 
     public abstract class Application {
        // .....

        public void openDocument(String name) {
            // Template Method
            if(!canOpenDocument(name)) { // unable to open file
                // show error message, throw exception
                return;
            }

            Document doc = createDocument(); // Factory Method

            if(doc != null) {
                _docs.addDocument(doc);
                // Template Method
                aboutToOpenDocument(doc);
                 doc.open();
                 doc.doRead();
            }
        }

        // Factory Method
        public abstract Document createDocument();

        // Template Method
        public abstract boolean canOpenDocument(String name);
        public abstract void aboutToOpenDocument(Document doc);
     }
     
     public class MyApplication extends Application {
        // implement Factory Method
        public void Document createDocument() {
            return new MyDocument();
        }

        // implement Template Method
        public void boolean canOpenDocument(String name) {
            // implemented code here
        }

        public void aboutToOpenDocument(Document doc) {
            // implemented code here
        }
     }
     
    Factyro Method模式將實際要創(chuàng)建的物件推遲至子類中決定,而 Template Method模式則是將流程框架的實作留待子類來解決,事實上在這個例子中,您也可以將createDocument()看作是Template Method模式中的一個方法,從物件創(chuàng)建的角度來看它是Factory Method,而從流程框架的角度來看,它則是Template Method模式的一個方法實作。
    posted on 2007-04-17 10:52 張金鵬 閱讀(357) 評論(0)  編輯  收藏 所屬分類: Behavioral 模式
    主站蜘蛛池模板: 免费看a级黄色片| 国产一级淫片a免费播放口| 亚洲无砖砖区免费| 亚洲AV无码一区二区三区系列| 国产精品亚洲а∨天堂2021 | 亚洲AV无码一区二区三区电影 | a毛片在线免费观看| 国产亚洲精品成人AA片新蒲金| 黄页视频在线观看免费| 亚洲精品成人区在线观看| 七次郎成人免费线路视频| 亚洲女人被黑人巨大进入| 九九久久精品国产免费看小说 | 免费A级毛片无码A| 免费无遮挡无码视频在线观看| 亚洲国产婷婷综合在线精品| fc2免费人成在线视频| 亚洲AV无码一区东京热| 91香蕉国产线在线观看免费 | 亚洲国产人成精品| 国产在线观看无码免费视频| 亚洲国产精品无码久久一线| 37pao成人国产永久免费视频 | 国产黄片不卡免费| 亚洲AV永久无码精品成人| 久久国产乱子伦免费精品| 亚洲夂夂婷婷色拍WW47| 最新免费jlzzjlzz在线播放| 亚洲AV无码乱码在线观看代蜜桃 | 激情内射亚洲一区二区三区爱妻| 在线观看特色大片免费视频 | 亚洲成a人一区二区三区| a级毛片在线免费看| 亚洲国产成人精品电影| 国产大片51精品免费观看| 久久综合亚洲鲁鲁五月天| 无码中文字幕av免费放| 思思久久99热免费精品6| 西西人体44rt高清亚洲 | 成人免费黄色网址| 国产精品亚洲色图|