模板是指在薄片塑料板上面寫字后挖空,再使用毛筆或色筆涂滿挖空部分,就能看到純手工而以不失工整的字樣,看到模板上的挖空形狀,馬上就知道最后會變出什么樣子的字,不過實際上所顯現出來的字樣還是要依所使用的畫筆種類而定.拿黑色簽字筆當畫筆,結果當然就是簽字筆的字樣;當用鉛筆來畫,得到的也只會是灰黑色的鉛筆字;如果用五顏六色的彩色筆,自然能創出讓人眼花的多色字.但是,無論使用哪種文具,制作出來的字樣都還是脫不了模板上已經固定的形狀。

             下面我們用例子說明模板方法

            程序示例類之間的關系

            1.模板類,相當于我們上面提到的薄片塑料板

          Java代碼 復制代碼
          1. package com.pattern.templateMethod;   
          2.   
          3. /**  
          4.  * 抽象類,充當模板角色  
          5.  * @author administrator  
          6.  *  
          7.  */  
          8. public abstract class AbstractDisplay {   
          9.     //由子類實現的抽象方法   
          10.     public abstract void open();      
          11.     public abstract void print();   
          12.     public abstract void close();   
          13.     //抽象類實現的方法,final可以保證在子類不會被修改   
          14.     public final void display() {   
          15.         open();   //先open...   
          16.         for(int i=0; i < 5; i++) {  //反復輸出5次   
          17.             print();     
          18.         }   
          19.         close(); //輸出完畢,close   
          20.     }   
          21. }  

           

            2.字符類,輸出單個字符

          Java代碼 復制代碼
          1. package com.pattern.templateMethod;   
          2.   
          3. public class CharDisplay extends AbstractDisplay {   
          4.     private char ch;     //應輸出的字符   
          5.     public CharDisplay(char ch) {  //把構造函數傳遞過來的字符ch,存儲在字段內   
          6.         this.ch = ch;   
          7.     }   
          8.      
          9.     public void open() {   
          10.         System.out.print("<<");   //輸出"<<"作為開始字符串   
          11.     }   
          12.     public void close() {   
          13.         System.out.println(">>");  //輸出 ">>"作為結束字符串   
          14.     }   
          15.     public void print() {   
          16.         System.out.print(ch);    //輸出存儲在字段的字符   
          17.     }   
          18.   
          19. }  

           

             3.字符串類,輸出字符串

          Java代碼 復制代碼
          1. package com.pattern.templateMethod;   
          2.   
          3. /**  
          4.  *   
          5.  * @author administrator  
          6.  */  
          7. public class StringDisplay extends AbstractDisplay {   
          8.     private String string;  //應輸出的字符串   
          9.     private int width;      //以byte為單位所求出的字符串的"長度"   
          10.        
          11.     public StringDisplay(String string) {   
          12.         this.string =string;   
          13.         width = string.getBytes().length;   
          14.     }   
          15.   
          16.     public void open() {  //打印頭裝飾字符串   
          17.         printLine();   
          18.     }   
          19.     public void print() { //打印內容   
          20.         System.out.println("|"+string+"|");   
          21.     }   
          22.     public void close() { //打印尾裝飾字符串   
          23.         printLine();   
          24.     }   
          25.   
          26.     public void printLine() {   
          27.         System.out.print("+");  //輸出"+"號表示邊框位置   
          28.         for(int i=0; i < width; ++i) {   
          29.             System.out.print("-");  //當作線段   
          30.         }   
          31.         System.out.println("+");  //輸出"+"號表示邊框位置   
          32.     }   
          33. }  

            4.測試類

          Java代碼 復制代碼
          1. package com.pattern.templateMethod;   
          2.   
          3. public class Main {   
          4.     public static void main(String[] args) {   
          5.         //建立1個有'A'的CharDisplay的對象   
          6.         AbstractDisplay d1 = new CharDisplay('A');   
          7.         //建立1個有"Hello world"的StringDisplay的對象   
          8.         AbstractDisplay d2 = new StringDisplay("Hello World");   
          9.            
          10.         //d1,d2都是AbstractDisplay的子類對象,可以調用繼承到的display()方法   
          11.         d1.display();   
          12.         d2.display();   
          13.     }   
          14. }  

           

           輸出:

           

          C代碼 復制代碼
          1.  <<AAAAA>>   
          2. +-----------+   
          3. |Hello World|   
          4. |Hello World|   
          5. |Hello World|   
          6. |Hello World|   
          7. |Hello World|   
          8. +-----------+  

           

           

           

           

           

          設計思想:

            作為模板的方法定義在父類(父類為抽象類),而方法定義使用抽象方法,實現抽象方法的是子類,要在子類實現方法,才能決定具體的操作。如果在不同的子類執行不同實現就可以發展出不同的處理內容。不過,無論在哪個子類執行任何一種實現,處理的大致流程都還是要依照父類制定的方式。

          posted on 2008-11-04 10:32 caihaibo 閱讀(385) 評論(0)  編輯  收藏 所屬分類: java模式
          主站蜘蛛池模板: 龙海市| 罗城| 林周县| 洪泽县| 庆城县| 抚远县| 湖北省| 都江堰市| 霍山县| 五常市| 江西省| 宁都县| 南平市| 五大连池市| 余江县| 包头市| 淮安市| 行唐县| 博乐市| 丘北县| 长顺县| 富阳市| 米脂县| 新田县| 慈溪市| 仁怀市| 淳安县| 仲巴县| 和林格尔县| 灵寿县| 德安县| 尖扎县| 岱山县| 中江县| 于田县| 敦化市| 临邑县| 化州市| 桐柏县| 耿马| 苗栗市|