Template 模式

  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

  感受這種模式仍是很實用的。我本身的理解是將算法流程,或者說是一類事情的統一工做流程放到基類裏面,然而具體不一樣的工做細節由具體的子類本身去實現。仍是很是好用的。設計

相關文章
相關標籤/搜索