程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> JAVA模板方法設計模式(從現實生活角度理解代碼原理),java設計模式

JAVA模板方法設計模式(從現實生活角度理解代碼原理),java設計模式

編輯:JAVA綜合教程

JAVA模板方法設計模式(從現實生活角度理解代碼原理),java設計模式


概述:

定義一個功能的框架(骨架),一部分功能是確定的,一部分功能是不確定的,先把確定的部分實現,把不確定的部分延遲到子類中實現。

實現該模式的關鍵步驟:

第一步:抽象類,實現模板方法,定義功能(確定的以及不確定的)的框架。

第二步:具體類,實現抽象類中的抽象方法,已完成完整的功能。

老規矩,最近想整一台BMW1系,去了趟4S店,店裡恰好有一台現車,但顏色我不太喜歡,這時服務顧問上來解釋說:“先生,您看中的這台車就這一個型號,外觀,發動機,內飾等配置都是一樣的,但顏色是可以個性化定制的,所以這個您不用擔心”。這裡大家該明白了,這就是一個典型的模板方法了,確定的功能是發動機,外觀,內飾等,不確定的就是顏色了。那我們就開始代碼實現了,畢竟作為程序員,只有敲好了代碼才買得起寶馬啊大哭

第一步:抽象類,定義功能框架

 1 abstract class BuyCar{
 2     public void buy(){
 3         //確定的功能
 4         System.out.println("歡迎來到寶馬4S店,我給你介紹下你選的這款車");
 5         System.out.println("外觀:兩廂,家族式雙腎柵格,典型的寶馬臉");
 6         System.out.println("發動機:2.0L雙渦管單渦輪增壓發動機");
 7         System.out.println("內飾:。。。。。。。。");
 8         System.out.println("這款車整體請看就是這樣,但顏色可以選擇,你想要白色還是紅色呢?");
 9         //不確定的功能選項
10         chooseColor();
11     }
12     //對不確定功能定義抽象方法供具體類實現
13     public abstract void  chooseColor();
14 }

第二步:具體類,實現抽象方法

1 class Man extends BuyCar{
2     public  void  chooseColor(){
3         System.out.println("白色的");
4     }
5 }

測試類:

1 public class TemplateMethod{
2     public static void main(String[] args){
3         Man m = new Man();
4         m.buy();
5     }
6 }

輸出結果:

1 歡迎來到寶馬4S店,我給你介紹下你選的這款車
2 外觀:兩廂,家族式雙腎柵格,典型的寶馬臉
3 發動機:2.0L雙渦管單渦輪增壓發動機
4 內飾:。。。。。。。。
5 這款車整體請看就是這樣,但顏色可以選擇,你想要白色還是紅色呢?
6 白色的

就這樣,我的購車之旅就結束了。也對模板方法有了新的感悟:

該模式有他的優點,比如說:

(1)模板方法模式通過把不變的行為搬移到超類,去除了子類中的重復代碼。

(2)子類實現算法的某些細節,有助於算法的擴展。

(3)通過一個父類調用子類實現的操作,通過子類擴展增加新的行為,符合“開放-封閉原則”。

但是缺點也同樣明顯:每個不同的實現都需要定義一個子類,這會導致類的個數的增加,設計更加抽象。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved