首页 > 代码库 > Template 模式

Template 模式

  Template的描述我从书上摘了一段下来:

  在面向对象系统的分析与设计过程中经常会遇到这样一种情况:对于某一个业务逻辑 (算法实现)在不同的对象中有不同的细节实现,但是逻辑(算法)的框架(或通用的应用 算法)是相同的。

  我自己在写代码的时候曾经有意无意的用到过Template。那个时候没有太多了解设计模式,只是感觉有些类有公共部分,或者说行为方式流程是一样的,但是在流程当中的某些细节可能又是不一样的。这样很自然地想到把公共部分放到基类里面去,各种细节延迟到子类当中去实现。这样做的话可以对外提供一个统一的接口,同事也有很好的扩展性。

  我举个例子,比如说有一个实现网络请求并且对回包数据解析的类,我称之为Request:

 1 public class Request { 2  3     //处理返回数据的算法,其中包含数据解析的步骤 4     public void handleResponse(void *data){ 5         ... 6         parsedData pData = http://www.mamicode.com/this.parseData(data); 7         ... 8     } 9 10     //抽象的数据解析方法让子类去实现11     abstract ParsedData parseData(void *data);12 13     ...14 }

  其中handlerRespponse是一个算法流程,其中包含了parseData步骤,但是这个步骤可能在不同类型的Request里面实现不一样。所以将parseData定义成抽象的方法,在子类中实现。假设现在我有两种Request,UserInfoRequest,SongRequest,这个两种除了数据解析的过程不一样其它的都一样。那么我们可以很容易的进行实现:

 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类型只需要添加类实现抽象部分就可以了。

  感觉这种模式还是很实用的。我自己的理解是将算法流程,或者说是一类事情的统一工作流程放到基类里面,然而具体不同的工作细节由具体的子类自己去实现。还是非常好用的。