Java設計模式—模板方法(Template Method)

來源:互聯網
上載者:User

標籤:

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

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

  程式樣本類之間的關係

  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. +-----------+  

 

 

 

 

 

設計思想:

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

Java設計模式—模板方法(Template Method)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.