從語言層次的角度只是單純的抽象類的實現,在抽象類中哪些方法是抽象的,哪些須要子類實現,就須要業務上的要求了。使框架的分工更清晰,哪些人作哪些工做(架構師構造框架不可變、算法師實現算法可變),此模板簡單而經常使用。java
抽象方法:須要子類實現的,不一樣的子類提供了不一樣的實現功能。(可變)算法
模版方法:定義了主邏輯功能,裏面用抽象方法來實現不一樣的功能。(不可變)編程
抽象類架構
public abstract class Template { abstract void sort(int[] arr); void printArray(int[] arr) { sort(arr); for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]); } } }
具體實現子類:實現抽象類,不一樣的子類用不一樣的方法實現。框架
class TemplateImp extends Template { @Override void sort(int[] arr) { for (int i = 0; i < arr.length-1; i++) { for(int j = i; j < arr.length-1; j++){ if (arr[i] > arr[j + 1]) { int t; t = arr[i]; arr[i] = arr[j + 1]; arr[j + 1] = t; } } }
測試類:ide
class Test { public static void main(String[] args) { int[] arr = { 6, 2, 1, 5, 8, 4 }; Template template = new TemplateImp(); template.printArray(arr); } }
結果:函數
1
2
4
5
6
8測試
模板定義了兩個函數,排序和打印,排序能夠用不一樣的子類實現不一樣的排序方法(可變),而打印是不可變的,不須要子類實現。在現實中實現(引用別人的話):編碼
大部分剛步入職場的畢業生應該都有相似B的經歷。一個複雜的任務,由公司中的牛人們將主要的邏輯寫好,而後把那些看上去比較簡單的方法寫成抽象的,交給其 他的同事去開發。這種分工方式在編程人員水平層次比較明顯的公司中常常用到。好比一個項目組,有架構師,高級工程師,初級工程師,則通常由架構師使用大量 的接口、抽象類將整個系統的邏輯串起來,實現的編碼則根據難度的不一樣分別交給高級工程師和初級工程師來完成。怎麼樣,是否是用到過模版方法模式?
spa