亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

深入解析Java的設計模式編程中的模板方法模式

 更新時間:2016年02月03日 17:41:47   作者:Zhang_H  
這篇文章主要介紹了深入解析Java的設計模式編程中的模板方法模式, 模版方法模式由一個抽象類和一個(或一組)實現(xiàn)類通過繼承結構組成,需要的朋友可以參考下

定義:
 定義一個操作中的算法的框架,而將一些步驟延遲到子類中。使得子類可以不改變一個算法的結構即可重新定義該算法的某些特定步驟。

聽起來好高端的樣子,我的理解:

    1.父類聲明了若干個抽象方法(基本方法)和若干個具體方法(模板方法)

    2.抽象方法是一個算法(過程)的步驟,在子類中實現(xiàn)

    3.模板方法是一個算法(過程)的框架,在父類中已經約定好,實現(xiàn)對基本方法調用,完成固定的邏輯

    4.一個算法(過程)的結構在父類中定義,具體的實現(xiàn)細節(jié)則在子類中實現(xiàn)

    注:為了防止惡意操作,一般模板方法都加上final,禁止重寫

通用類圖:

201623173930405.jpg (381×239)

事實上,模版方法是編程中一個經常用到的模式。先來看一個例子,某日,程序員A拿到一個任務:給定一個整數數組,把數組中的數由小到大排序,然后把排序之后的結果打印出來。經過分析之后,這個任務大體上可分為兩部分,排序和打印,打印功能好實現(xiàn),排序就有點麻煩了。但是A有辦法,先把打印功能完成,排序功能另找人做。

abstract class AbstractSort { 
   
  /** 
   * 將數組array由小到大排序 
   * @param array 
   */ 
  protected abstract void sort(int[] array); 
   
  public void showSortResult(int[] array){ 
    this.sort(array); 
    System.out.print("排序結果:"); 
    for (int i = 0; i < array.length; i++){ 
      System.out.printf("%3s", array[i]); 
    } 
  } 
} 

        寫完后,A找到剛畢業(yè)入職不久的同事B說:有個任務,主要邏輯我已經寫好了,你把剩下的邏輯實現(xiàn)一下吧。于是把AbstractSort類給B,讓B寫實現(xiàn)。B拿過來一看,太簡單了,10分鐘搞定,代碼如下:

class ConcreteSort extends AbstractSort { 
 
  @Override 
  protected void sort(int[] array){ 
    for(int i=0; i<array.length-1; i++){ 
      selectSort(array, i); 
    } 
  } 
   
  private void selectSort(int[] array, int index) { 
    int MinValue = 32767; // 最小值變量 
    int indexMin = 0; // 最小值索引變量 
    int Temp; // 暫存變量 
    for (int i = index; i < array.length; i++) { 
      if (array[i] < MinValue){ // 找到最小值 
        MinValue = array[i]; // 儲存最小值 
        indexMin = i;  
      } 
    } 
    Temp = array[index]; // 交換兩數值 
    array[index] = array[indexMin]; 
    array[indexMin] = Temp; 
  } 
} 

寫好后交給A,A拿來一運行:

public class Client { 
  public static int[] a = { 10, 32, 1, 9, 5, 7, 12, 0, 4, 3 }; // 預設數據數組 
  public static void main(String[] args){ 
    AbstractSort s = new ConcreteSort(); 
    s.showSortResult(a); 
  } 
} 

運行結果:

排序結果: 0 1 3 4 5 7 9 10 12 32

  
 
模版方法模式的結構
       模版方法模式由一個抽象類和一個(或一組)實現(xiàn)類通過繼承結構組成,抽象類中的方法分為三種:
抽象方法:父類中只聲明但不加以實現(xiàn),而是定義好規(guī)范,然后由它的子類去實現(xiàn)。
模版方法:由抽象類聲明并加以實現(xiàn)。一般來說,模版方法調用抽象方法來完成主要的邏輯功能,并且,模版方法大多會定義為final類型,指明主要的邏輯功能在子類中不能被重寫。
鉤子方法:由抽象類聲明并加以實現(xiàn)。但是子類可以去擴展,子類可以通過擴展鉤子方法來影響模版方法的邏輯。
抽象類的任務是搭建邏輯的框架,通常由經驗豐富的人員編寫,因為抽象類的好壞直接決定了程序是否穩(wěn)定性。
       實現(xiàn)類用來實現(xiàn)細節(jié)。抽象類中的模版方法正是通過實現(xiàn)類擴展的方法來完成業(yè)務邏輯。只要實現(xiàn)類中的擴展方法通過了單元測試,在模版方法正確的前提下,整體功能一般不會出現(xiàn)大的錯誤。
 

 
模板方法模式的優(yōu)點:

    1.  封裝不變部分,擴展可變部分

    2.  提取公共部分代碼,便于維護

    3.  行為由父類控制,子類實現(xiàn)

模板方法模式的適用場景:

    1.     多個子類有公共方法,并且邏輯基本相同

    2.    對復雜的算法,核心算法設計為模板方法,細節(jié)功能則由各個子類實現(xiàn)

    3.    重構代碼

模板方法模式的擴展

  •     基本方法由于不需要對外提供訪問,因此可以設計為protected類型
  •     設計鉤子方法(Hook Method):對外部提供接口,可以影響模板方法內的具體執(zhí)行順序

總結:

    父類建立框架,子類在重寫了父類部分方法后,再調用從父類繼承的方法,產生不同的結果。

相關文章

  • Java_int、double型數組常用操作工具類(分享)

    Java_int、double型數組常用操作工具類(分享)

    下面小編就為大家?guī)硪黄狫ava_int、double型數組常用操作工具類(分享)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • Spring Cloud搭建eureka過程圖解

    Spring Cloud搭建eureka過程圖解

    這篇文章主要介紹了Spring Cloud搭建eureka過程圖解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-12-12
  • Netty客戶端接入流程NioSocketChannel創(chuàng)建解析

    Netty客戶端接入流程NioSocketChannel創(chuàng)建解析

    這篇文章主要為大家介紹了Netty客戶端接入流程NioSocketChannel創(chuàng)建源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-03-03
  • Java RabbitMQ高級特性詳細分析

    Java RabbitMQ高級特性詳細分析

    為了保證消息的可靠性傳輸,包括投遞消息的生產方能投遞成功,和消息消費的消費方正確消費,RabbitMQ 提供了兩個確認機制,由于消息按照流通的順序從左到右,因此為保證可靠性,MQ必須對 Producer進行確認,Consumer 必須對 MQ 進行確認
    2022-08-08
  • Java基本數據類型存儲在JVM中的存儲位置介紹

    Java基本數據類型存儲在JVM中的存儲位置介紹

    這篇文章主要介紹了Java基本數據類型存儲在JVM中的存儲位置,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Jackson忽略字段實現(xiàn)對字段進行序列化和反序列化

    Jackson忽略字段實現(xiàn)對字段進行序列化和反序列化

    在使用?Jackson?進行序列化和反序列化時,有時候需要對某些字段進行過濾,以便在?JSON?數據中不包含某些敏感信息,下面就一起來了解一下Jackson忽略字段實現(xiàn)對字段進行序列化和反序
    2023-10-10
  • Mybatis的一級緩存和二級緩存原理分析與使用

    Mybatis的一級緩存和二級緩存原理分析與使用

    mybatis-plus 是一個 Mybatis 的增強工具,在 Mybatis 的基礎上只做增強不做改變,為簡化開發(fā)、提高效率而生,這篇文章帶你了解Mybatis的一級和二級緩存
    2021-11-11
  • 解析探秘fescar分布式事務實現(xiàn)原理

    解析探秘fescar分布式事務實現(xiàn)原理

    這篇文章主要為大家解析探秘fescar分布式事務的實現(xiàn)原理,fescar的txc模型實現(xiàn)非常有研究的價值,所以今天我們來好好翻一翻fescar項目的代碼
    2022-02-02
  • 詳解Spring MVC的攔截器與異常處理機制

    詳解Spring MVC的攔截器與異常處理機制

    這篇文章主要為大家詳細介紹了Spring MVC的攔截器與異常處理機制,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • springboot?通過博途獲取plc點位的數據代碼實現(xiàn)

    springboot?通過博途獲取plc點位的數據代碼實現(xiàn)

    這篇文章主要介紹了springboot?通過博途獲取plc點位的數據的代碼實現(xiàn),本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-08-08

最新評論