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

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

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

香港云服务器
服務器之家 - 編程語言 - Java教程 - Java設計模式之模版方法模式簡介

Java設計模式之模版方法模式簡介

2019-11-25 14:29shichen2014 Java教程

這篇文章主要介紹了Java設計模式之模版方法模式,需要的朋友可以參考下

Java設計模式的模板方法模式定義一個操作中算法的框架,而將一些步驟延遲到子類中,使得子類可以不改變算法的結構即可重定義該算法中的某些特定步驟。屬于行為類模式

如下圖所示:

Java設計模式之模版方法模式簡介

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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);
 }
}

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

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

模版方法模式由一個抽象類和一個(或一組)實現類通過繼承結構組成,抽象類中的方法分為三種:

1.抽象方法:父類中只聲明但不加以實現,而是定義好規范,然后由它的子類去實現。

2.模版方法:由抽象類聲明并加以實現。一般來說,模版方法調用抽象方法來完成主要的邏輯功能,并且,模版方法大多會定義為final類型,指明主要的邏輯功能在子類中不能被重寫。

3.鉤子方法:由抽象類聲明并加以實現。但是子類可以去擴展,子類可以通過擴展鉤子方法來影響模版方法的邏輯。

抽象類的任務是搭建邏輯的框架,通常由經驗豐富的人員編寫,因為抽象類的好壞直接決定了程序是否穩定性。

實現類用來實現細節。抽象類中的模版方法正是通過實現類擴展的方法來完成業務邏輯。只要實現類中的擴展方法通過了單元測試,在模版方法正確的前提下,整體功能一般不會出現大的錯誤。
 
模版方法的優點及適用場景:

容易擴展。一般來說,抽象類中的模版方法是不易反生改變的部分,而抽象方法是容易反生變化的部分,因此通過增加實現類一般可以很容易實現功能的擴展,符合開閉原則。

便于維護。對于模版方法模式來說,正是由于他們的主要邏輯相同,才使用了模版方法,假如不使用模版方法,任由這些相同的代碼散亂的分布在不同的類中,維護起來是非常不方便的。

比較靈活。因為有鉤子方法,因此,子類的實現也可以影響父類中主邏輯的運行。但是,在靈活的同時,由于子類影響到了父類,違反了里氏替換原則,也會給程序帶來風險。這就對抽象類的設計有了更高的要求。

在多個子類擁有相同的方法,并且這些方法邏輯相同時,可以考慮使用模版方法模式。在程序的主框架相同,細節不同的場合下,也比較適合使用這種模式。

延伸 · 閱讀

精彩推薦
591
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25
主站蜘蛛池模板: 日韩一级免费毛片 | 毛片在线免费 | 国产三级a三级三级 | 国产午夜精品久久久久久免费视 | 国产成人在线免费观看视频 | 免费在线性爱视频 | 成人在线视频免费 | 91精品免费在线 | 伊人欧美 | 久草在线新时代视觉 | 99re久久最新地址获取 | 久久草在线看 | 久久国产亚洲精品 | 精品一区二区三区四区在线 | 亚洲精品一区中文字幕 | 黄a大片| 亚洲国产成人久久一区www妖精 | 青草久久网 | 被啪羞羞视频在线观看 | 亚欧在线免费观看 | 欧美成人一区二区视频 | 国产乱淫av | 欧美日本综合 | 全免费午夜一级毛片真人 | 黄色特级一级片 | 久久久久北条麻妃免费看 | 中国老女人一级毛片视频 | 久久精品一级片 | 97黄色网 | 日本羞羞的午夜电视剧 | 日本a在线观看 | 中国fx性欧美xxxx | 九九热色| 国产一区免费在线 | 久久久久免费电影 | 欧美日韩网站在线观看 | 欧美日韩大片在线观看 | 国产精品爱久久久久久久 | 91在线视频精品 | 无码专区aaaaaa免费视频 | 日韩一级片一区二区三区 |