码迷,mamicode.com
首页 > 其他好文 > 详细

Template 模式

时间:2014-08-10 23:55:33      阅读:243      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   io   数据   for   ar   cti   

  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,这个两种除了数据解析的过程不一样其它的都一样。那么我们可以很容易的进行实现:

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

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

Template 模式,布布扣,bubuko.com

Template 模式

标签:style   blog   color   io   数据   for   ar   cti   

原文地址:http://www.cnblogs.com/nightwolf/p/3903460.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!