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
感受这种模式仍是很实用的。我本身的理解是将算法流程,或者说是一类事情的统一工做流程放到基类里面,然而具体不一样的工做细节由具体的子类本身去实现。仍是很是好用的。设计