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类型只需要添加类实现抽象部分就可以了。
感觉这种模式还是很实用的。我自己的理解是将算法流程,或者说是一类事情的统一工作流程放到基类里面,然而具体不同的工作细节由具体的子类自己去实现。还是非常好用的。
时间: 2024-11-05 18:44:28