激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

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

PHP教程|ASP.NET教程|JAVA教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|JavaScript|易語言|

服務器之家 - 編程語言 - JAVA教程 - 23種設計模式(12)java模版方法模式

23種設計模式(12)java模版方法模式

2021-02-23 11:02阿木俠 JAVA教程

這篇文章主要為大家詳細介紹了23種設計模式之java模版方法模式,具有一定的參考價值,感興趣的小伙伴們可以參考一下

23種設計模式第十二篇:java模版方法模式

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

類型:行為類模式

類圖:

23種設計模式(12)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
8
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

        運行正常。行了,任務完成。沒錯,這就是模版方法模式。大部分剛步入職場的畢業生應該都有類似b的經歷。一個復雜的任務,由公司中的牛人們將主要的邏輯寫好,然后把那些看上去比較簡單的方法寫成抽象的,交給其他的同事去開發。這種分工方式在編程人員水平層次比較明顯的公司中經常用到。比如一個項目組,有架構師,高級工程師,初級工程師,則一般由架構師使用大量的接口、抽象類將整個系統的邏輯串起來,實現的編碼則根據難度的不同分別交給高級工程師和初級工程師來完成。怎么樣,是不是用到過模版方法模式?

模版方法模式的結構

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

模版方法的優點及適用場景

       容易擴展。一般來說,抽象類中的模版方法是不易反生改變的部分,而抽象方法是容易反生變化的部分,因此通過增加實現類一般可以很容易實現功能的擴展,符合開閉原則。
       便于維護。對于模版方法模式來說,正是由于他們的主要邏輯相同,才使用了模版方法,假如不使用模版方法,任由這些相同的代碼散亂的分布在不同的類中,維護起來是非常不方便的。
       比較靈活。因為有鉤子方法,因此,子類的實現也可以影響父類中主邏輯的運行。但是,在靈活的同時,由于子類影響到了父類,違反了里氏替換原則,也會給程序帶來風險。這就對抽象類的設計有了更高的要求。
       在多個子類擁有相同的方法,并且這些方法邏輯相同時,可以考慮使用模版方法模式。在程序的主框架相同,細節不同的場合下,也比較適合使用這種模式。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美一级高清免费 | 久久久成人免费视频 | 精品国产一区二区三区久久久蜜 | h色视频在线观看 | 亚洲成人福利在线观看 | 婷婷久久综合九色综合色多多蜜臀 | 免费一级特黄毛片视频 | 欧美大逼网| 色精品国产 | 国内自拍网址 | 中文字幕综合在线观看 | 精选久久 | 九九综合视频 | 国产大片中文字幕在线观看 | 欧美亚洲国产一区二区三区 | 欧美一区永久视频免费观看 | 91成人在线免费观看 | 欧美成人二区 | 欧美亚洲国产日韩 | 蜜桃视频在线免费播放 | 麻豆传传媒久久久爱 | 久久日本 | 92看片淫黄大片欧美看国产片 | 久久最新免费视频 | 99999久久久久久 | 懂色av懂色aⅴ精彩av | 2021狠狠操 | 免费国产人成网站 | 黄色片视频在线观看 | 毛片福利 | 看91视频| 免费视频爱爱太爽了 | 一级成人在线 | 宅男噜噜噜66一区二区 | 久久综合九色 | 日本aaaa片毛片免费观看视频 | 九九福利视频 | 久久国产精品二国产精品中国洋人 | 国产亚洲综合精品 | 国产色爱综合网 | 13一14毛片免费看 |