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

 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

时间: 2024-11-05 18:44:28

Template 模式的相关文章

Java事务处理全解析(五)—— Template模式

在本系列的上一篇文章中,我们讲到了使用TransactionManger和ConnectionHolder完成线程安全的事务管理,在本篇中,我们将在此基础上引入Template模式进行事务管理. Template模式大家应该都很熟悉,比如Spring就提供了许多Template,像JdbcTemplate和JmsTemplate等.Template模式的基本思想是:在超类里将完成核心功能的方法声明为抽象方法,留给子类去实现,而在超类中完成一些通用操作,比如JMS的Session的建立和数据库事务

Java模板模式(Template模式)

Template模式定义:定义一个操作中算法的骨架,将一些步骤的执行延迟到其子类中. 其实Java的抽象类本来就是Template模式,因此使用很普遍.而且很容易理解和使用,我们直接以示例开始: public abstract class Benchmark { /** * 下面操作是我们希望在子类中完成 */ public abstract void benchmark(); /** * 重复执行benchmark次数 */ public final long repeat (int coun

Template模式详解--设计模式(12)

Template模式来源:    在面向对象系统的分析与设计过程中经常会遇到这样一种情况:对于某一个业务逻辑(算法实现)在不同的对象中有不同的细节实现,但是逻辑(算法)的框架(或通用的应用算法)是相同的.Template提供了这种情况的一个实现框架. Template模式作用: Template模式又叫模板方法模式,在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以在不改变算法结构的情冴下,重新定义算法中的某些步骤. 我们使用冲泡咖啡和冲泡茶的例子 加工流程: 咖啡冲

Template模式

在开发时,有时会遇到对于一个算法的实现,在不同的对象中有不同的实现,但是这个算法的框架是相同的,这时可以使用Template模式或Strategy模式.Template是采用继承的方式来实现这一点,即将算法框架放在抽象基类中,在基类定义好接口,之后在派生类实现算法. 类图结构如图所示: //Template.h #ifndef _TEMPLATE_H_ #define _TEMPLATE_H_ class AbstractClass { public: virtual ~AbstractClas

C++设计模式实现--模板(Template)模式

一. 问题 在面向对象系统的分析与设计过程中经常会遇到这样一种情况:对于某一个业务逻辑(算法实现)在不同的对象中有不同的细节实现,但是逻辑(算法)的框架(或通用的应用算法)是相同的.Template提供了这种情况的一个实现框架. 二. 模式 Template 模式是采用继承的方式实现这一点:将逻辑(算法)框架放在抽象基类中,并定义好细节的接口,子类中实现细节. 三. 代码 [cpp] view plaincopy //抽象基类,实现了一个模板方法 class AbstractClass { pu

Spring中Template模式与callback的结合使用浅析

Spring不论是与ibatis,还是与Hibernate的结合中,都使用到了Template模式与callback技术,来达到简化代码实现的目的.Template模式也即模板模式,用于对一些不太变化的流程进行模板化,与callback结合,可以将变化的部分出离出来,使用callback实现.然后根据不同的情况,向template注入不同的callback.那些模板代码就没有必要重复写了.我们看下spring和ibatis的结合中,Template和callback的使用: public cla

设计模式之——Template模板模式

Template模式又叫模板模式,是在父类中定义处理流程的框架,在子类中实现具体处理逻辑的模式.当父类的模板方法被调用时程序行为也会不同,但是,不论子类的具体实现如何,处理的流程都会按照父类中所定义的那样进行. 示例程序: 将一段字符串和字符循环显示五次的程序: AbstractDisplay 父类抽象的模板,里面定义了处理流程,但是没有具体把实现写出来 package site.wangxin520.gof.template; /** * 模板模式的模板,使用的是抽象类和抽象方法. * 在此模

跟我一起透彻理解template模板模式

#include <iostream> using namespace std; //template模式. class Base { public: void DealWhat() { this->Printf1(); this->Printf2(); } protected: virtual void Printf1() = 0; virtual void Printf2() = 0;//让子类实现算法的具体实现. }; class Son1 : public Base { p

设计模式之策略模式(Strategy)摘录

23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而一个对象创建型模式将实例化委托给另一个对象.创建型模式有两个不断出现的主旋律.第一,它们都将关于该系统使用哪些具体的类的信息封装起来.第二,它们隐藏了这些类的实例是如何被创建和放在一起的.整个系统关于这些对象所知道的是由抽象类所定义的接口.因此,创建型模式在什么被创建,谁创建它,它是怎样被创建的,以