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

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

            程序示例類之間的關系

            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模式
          主站蜘蛛池模板: 和田市| 班玛县| 姜堰市| 北宁市| 台东县| 田东县| 灵石县| 南昌县| 保康县| 民丰县| 库尔勒市| 嵊泗县| 颍上县| 龙泉市| 温州市| 定襄县| 灵丘县| 屏东县| 天津市| 关岭| 县级市| 荣成市| 襄垣县| 扎赉特旗| 开封县| 石景山区| 仁寿县| 荣成市| 八宿县| 延寿县| 桃江县| 丰台区| 肥西县| 鹿邑县| 广元市| 陆良县| 湾仔区| 阜康市| 额尔古纳市| 保康县| 莆田市|