国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - 深入解析Java的設計模式編程中的模板方法模式

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

2020-03-27 19:31Zhang_H JAVA教程

這篇文章主要介紹了深入解析Java的設計模式編程中的模板方法模式, 模版方法模式由一個抽象類和一個(或一組)實現類通過繼承結構組成,需要的朋友可以參考下

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

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

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

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

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

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

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

通用類圖:

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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找到剛畢業入職不久的同事B說:有個任務,主要邏輯我已經寫好了,你把剩下的邏輯實現一下吧。于是把AbstractSort類給B,讓B寫實現。B拿過來一看,太簡單了,10分鐘搞定,代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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拿來一運行:

?
1
2
3
4
5
6
7
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);
  }
}

運行結果:

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

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

 
模板方法模式的優點:

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

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

    3.  行為由父類控制,子類實現

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

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

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

    3.    重構代碼

模板方法模式的擴展

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

總結:

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

延伸 · 閱讀

精彩推薦
  • JAVA教程基于Ok+Rxjava實現斷點續傳下載

    基于Ok+Rxjava實現斷點續傳下載

    這篇文章主要為大家詳細介紹了基于Ok+Rxjava實現斷點續傳下載,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    Super_Ks4152019-06-25
  • JAVA教程詳解Java編程中if...else語句的嵌套寫法

    詳解Java編程中if...else語句的嵌套寫法

    這篇文章主要介紹了Java編程中if...else語句的嵌套寫法,是Java入門學習中的基礎知識,需要的朋友可以參考下 ...

    goldensun3192020-01-16
  • JAVA教程深入理解Java遺傳算法

    深入理解Java遺傳算法

    這篇文章主要為大家詳細介紹了Java遺傳算法,本文對基因的編碼采用二進制規則,分享了對Java遺傳算法的理解,感興趣的小伙伴們可以參考一下 ...

    xiaojimanman1952020-03-26
  • JAVA教程Java I/O技術之文件操作詳解

    Java I/O技術之文件操作詳解

    這篇文章主要介紹了Java I/O技術之文件操作詳解,需要的朋友可以參考下 ...

    shichen20142742019-11-24
  • JAVA教程Java實現按權重隨機數

    Java實現按權重隨機數

    這篇文章主要介紹了Java實現按權重隨機數,本文給出了提出問題、分析問題、解決問題三個步驟,需要的朋友可以參考下 ...

    junjie4362019-12-17
  • JAVA教程Java中的Vector和ArrayList區別及比較

    Java中的Vector和ArrayList區別及比較

    這篇文章主要介紹了Java中的Vector和ArrayList區別及比較,本文從API、同步、數據增長、使用模式4個方面總結了它們之間的不同之處,需要的朋友可以參考下 ...

    junjie3392019-12-14
  • JAVA教程JAVA多線程和并發基礎面試問答(翻譯)

    JAVA多線程和并發基礎面試問答(翻譯)

    多線程和并發問題是Java技術面試中面試官比較喜歡問的問題之一。在這里,從面試的角度列出了大部分重要的問題,但是你仍然應該牢固的掌握Java多線程...

    mdxy-dxy3882019-11-27
  • JAVA教程Java進階教程之異常處理

    Java進階教程之異常處理

    這篇文章主要介紹了Java進階教程之異常處理,本文講解了JAVA的異常處理機制、異常的類型、拋出異常、自定義異常等內容,需要的朋友可以參考下 ...

    Vamei2912019-11-27
主站蜘蛛池模板: 精品日韩一区二区三区 | 中文字幕av一区二区三区 | a级国产黄色片 | 国产精品69毛片高清亚洲 | 中国a一片一级一片 | 欧美日韩亚洲综合 | 中文字幕在线观看一区二区 | 毛片免费视频 | 狠狠爱综合 | 久久久精品国产 | 日日摸夜夜添夜夜添高潮视频 | 中文字幕精品视频 | 黄色录像特级 | 日本a v在线播放 | 国产精品一二区 | 日韩视频精品在线 | 久久久久久久成人 | 欧美一区二区三区xxxx监狱 | 91精品国产综合久久久久久丝袜 | 国产h片在线观看 | 国产精品无码永久免费888 | 国产午夜久久 | 国产v日产∨综合v精品视频 | 成人免费视频网址 | 欧美 日韩 国产 成人 在线 91 | 一级免费视频 | 亚洲色图在线播放 | 91精品国产综合久久福利软件 | 久久国产精品免费一区二区三区 | 在线观看国产 | 性色蜜桃x88av | 黄色片网站在线 | 国产欧美精品区一区二区三区 | 中文字幕国产视频 | 最近的中文字幕在线看视频 | 国产日韩精品视频 | 精品视频在线一区 | 久久99久久99 | 久久国产精品久久久久久电车 | 精品无码久久久久久国产 | 精品第一页 |