Template的描述我從書上摘了一段下來:算法
在面向對象系統的分析與設計過程當中常常會遇到這樣一種狀況:對於某一個業務邏輯 (算法實現)在不一樣的對象中有不一樣的細節實現,可是邏輯(算法)的框架(或通用的應用 算法)是相同的。設計模式
我本身在寫代碼的時候曾經有意無心的用到過Template。那個時候沒有太多瞭解設計模式,只是感受有些類有公共部分,或者說行爲方式流程是同樣的,可是在流程當中的某些細節可能又是不同的。這樣很天然地想到把公共部分放到基類裏面去,各類細節延遲到子類當中去實現。這樣作的話能夠對外提供一個統一的接口,同事也有很好的擴展性。網絡
我舉個例子,好比說有一個實現網絡請求而且對回包數據解析的類,我稱之爲Request:框架
1 public class Request { 2 3 //處理返回數據的算法,其中包含數據解析的步驟 4 public void handleResponse(void *data){ 5 ... 6 parsedData pData = this.parseData(data); 7 ... 8 } 9 10 //抽象的數據解析方法讓子類去實現 11 abstract ParsedData parseData(void *data); 12 13 ... 14 }
其中handlerRespponse是一個算法流程,其中包含了parseData步驟,可是這個步驟可能在不一樣類型的Request裏面實現不同。因此將parseData定義成抽象的方法,在子類中實現。假設如今我有兩種Request,UserInfoRequest,SongRequest,這個兩種除了數據解析的過程不同其它的都同樣。那麼咱們能夠很容易的進行實現:this
1 public class UserInfoRequest extends Request{ 2 parseData(void *data){ 3 //do custom action. 4 ... 5 } 6 } 7 8 public class SongReuqest extends Request{ 9 parseData(void *data){ 10 //do custom action. 11 ... 12 } 13 }
這樣作的好處是,對外接口是統一的,並且若是有新的Request類型只須要添加類實現抽象部分就能夠了。spa
感受這種模式仍是很實用的。我本身的理解是將算法流程,或者說是一類事情的統一工做流程放到基類裏面,然而具體不一樣的工做細節由具體的子類本身去實現。仍是很是好用的。設計