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

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

相关文章
相关标签/搜索