设计模式之Template

Template模板模式定义:

定义一个操作中算法的骨架,将一些步骤的执行延迟到其子类中.

使用Java的抽象类时,就经常会使用到Template模式,因此Template模式使用很普遍.而且很容易理解和使用。

public abstract class Benchmark
{
/**
* 下面操作是我们希望在子类中完成
*/
public abstract void benchmark();
/**
* 重复执行benchmark次数
*/
public final long repeat (int count) {
if (count <= 0)
return 0;
else {
long startTime = System.currentTimeMillis();

for (int i = 0; i < count; i++)
benchmark();

long stopTime = System.currentTimeMillis();
return stopTime - startTime;
}
}
}

在上例中,我们希望重复执行benchmark()操作,但是对benchmark()的具体内容没有说明,而是延迟到其子类中描述:

public class MethodBenchmark extends Benchmark
{
/**
* 真正定义benchmark内容
*/
public void benchmark() {

for (int i = 0; i < Integer.MAX_VALUE; i++){
System.out.printtln("i="+i);
}
}
}

至此,Template模式已经完成,是不是很简单?

我们称repeat方法为模板方法, 它其中的benchmark()实现被延迟到子类MethodBenchmark中实现了,

看看如何使用:

Benchmark operation = new MethodBenchmark();

long duration = operation.repeat(Integer.parseInt(args[0].trim()));

System.out.println("The operation took " + duration + " milliseconds");

也许你以前还疑惑抽象类有什么用,现在你应该彻底明白了吧? 至于这样做的好处,很显然啊,扩展性强,以后Benchmark内容变化,我只要再做一个继承子类就可以,不必修改其他应用代码.

时间: 2024-12-03 18:46:54

设计模式之Template的相关文章

C#设计模式之Template Method设计模式(模版方法模式)

一.模板方法(Template Method)模式 准备一个抽象类,将部分逻辑以具体方法以及具体构造子的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑.不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现.这就是模版方法模式的用意. 很多人可能没有想到,模版方法模式实际上是所有模式中最为常见的几个模式之一,而且很多人可能使用过模版方法模式而没有意识到自己已经使用了这个模式.模版方法模式是基于继承的代码复用的基本技术,模版方法模式的结构和用法也是面向对象设计的核心. 模

设计模式[9]-Template Method

Type: Behavioral Template Method: 在一个操作中定义一个算法的骨架,将一些步骤推迟到子类中.让子类在不修改算法结构的基础上重新定义其中步骤. #include <iostream> using namespace std; class AbstractClass { public: void templateMethod() { cout<<"AbstractClass: Call subMethod"<<endl;

设计模式(Patterns in Java)

设计 板桥里人的设计模式讲解是国内媒体(包括书籍和网站)中最早的成体系介绍,本系列介绍纯为免费传播(转载本站文章,请保留作者和网址),尽量做到言简意赅,通俗易懂,但是难免有所疏漏敬请来信或论坛讨论,不断完善. 真正掌握设计模式需要在实践中不断研究和使用,关于设计模式在具体实例的应用,可以阅读板桥里人的书籍<Java实用系统开发指南>.书籍中8个实例都从设计模式.框架等高度对系统进行崭新的设计和实现,这种应用理念正是现在以及将来软件设计和编程的根本之道. 1:前言 学习GoF设计模式的重要性 建

Java设计模式学习心得

整个设计模式贯穿一个原理:面对介面编程,而不是面对实现,(面向物件编程应该改爲面向介面编程).目标原则是:降低耦合,增强灵活性. 一.创建模式 1.设计模式之Factory(工厂方法和抽象工厂) 使用工厂模式就象使用new一样频繁. 2.设计模式之Prototype(原型) 用原型实例指定创建物件的种类,並且通过拷贝这些原型创建新的物件. 3.设计模式之Builder 汽车由车轮 方向盘 发动机很多部件组成,同时,将这些部件组装成汽车也是一件複杂的工作,Builder模式就是将这两种情况分开进行

模板方法模式的例子

J2EE设计模式之Template 本文介绍了J2EE设计模式中的Template的用法.其实Java的抽象类本来就是Template模式,因此使用很普遍,而且很容易理解和使用.使用抽象类可以大大增强项目的扩展性. Template定义: 定义一个操作中算法的骨架,将一些步骤的执行延迟到其子类中. 其实Java的抽象类本来就是Template模式,因此使用很普遍.而且很容易理解和使用,我们直接以示例开始: public abstract class Benchmark  {  /**  * 下面

list 、set 、map 粗浅性能对比分析

 list .set .map 粗浅性能对比分析   不知道有多少同学和我一样,工作五年了还没有仔细看过list.set的源码,一直停留在老师教导的:"LinkedList插入性能比ArrayList好,LinkedList顺序遍历性能比ArrayList好"的世界里.可是真是如此么?本文很"肤浅"的对比和分析了几种常用的集合,"高手"可以就此打住不必往下阅读了... 本文分开介绍了List.Map.Set: (测试环境:win7.jdk.4G.

Java Web:主动和被动方式检测安全的框架

对于某些敏感的系统例如支付.交易需要为其加固,有必要将可能的攻击情况考虑进来加以防范,于是有了这么一个简易的安全框架.在前辈的代码上( 详见 :http://blog.csdn.net/zhongweijian/article/details/8680737)我大幅度重构,更好地理解 Java Web 安全实施措施. 源代码在:http://git.oschina.net/sp42/ajaxjs/tree/master/ajaxjs-security?dir=1&filepath=ajaxjs-

设计模式学习笔记(八)—Template Method模式

<设计模式>一书对Template Method模式是这样描述的: 定义一个操作中算法的骨架,而将一些步骤延迟到子类中.不改变算法的结构而重新定义它的步骤. 我的理解:定义一个抽象类或者说接口,在它的内部定义一些抽象的方法(供TemplateMethod调用的步骤)和一个TemplateMethod方法(非抽象方法),封装了这些抽象方法的接口或抽象类就是骨架.而将它的实现延迟到子类中,也就是用子类实现它.不改变算法的结构而重新定义它的步骤,也就是改写或者实现父类的这些非TemplateMeth

解读设计模式----模板方法模式(Template Method)

一. 模式概述 摸板方法(Template Method)模式是一种非常简单而又经常使用的设计模式.先创建一个父类,把其中的一个或多个方法留给子类去实现,这实际上就是在使用摸板模式.所谓的摸板模式可以这样来理解:"在一个类中定义一个算法,但将此算法的某些细节留到子类中去实现.换句话说,基类是一个抽象类,那么你就是在使用一种简单形式的摸板模式." 更近一步可以这样来理解:"准备一个抽象类,将部分逻辑以具体方法的形式实现,然后申明一些抽象方法来迫使子类实现剩余的逻辑.不同的子类可