`

失败的项目中想到了template Method

阅读更多
像这样在父类中指定处理大纲,在子类中规定具体内容的design pattern,
其实很多情况可以写很多单独的类,但是如果将共性提取出来!
当模板有错误的时候,只要修改这个模板就可以了!
(1):template Method Pattern 中的运用factory method pattern
(2):定义抽象类的时候,final方法可以用来指定类的工作流程,这样这个方法不被子类继承重载,这样在final类中实现factory的功能,没有必要干涉实现子类.
for example:
--可以实现object的创建和注册
public abstract class Factory {
public final Product create(String owner)
{
Product p=createProduct(owner);
registerProduct(p);
return p;
}
protected abstract Product createProduct(String owner);
protected abstract void registerProduct(Product product);
}


--指定在使用这个产品,可以多配置产品的属性
public abstract class Product {
public abstract void use();
}



(3)
设计模式之Template 

发布时间:2006.04.30 04:17     来源:月光软件站    作者:



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内容变化,我只要再做一个继承子类就可以,不必修改其他应用代码.


分享到:
评论

相关推荐

    TemplateMethod.rar

    其中,“模板方法”(Template Method)设计模式是行为设计模式的一种,主要用在父类定义一个算法的骨架,而将一些步骤延迟到子类中。这种模式允许子类在不改变算法整体结构的情况下重定义某些特定步骤。 标题...

    template-method-demo 模板方法示例

    在"template-method-demo"这个示例中,我们可以预见到它将展示如何在Java中应用模板方法模式。这个压缩包可能包含以下内容: 1. 一个抽象类(例如:`AbstractClass`),它定义了模板方法。在这个类中,可能会有一个...

    TemplateMethod.zip

    总结来说,"TemplateMethod.zip"中的代码示例展示了如何在C++中应用模板方法设计模式。通过定义模板方法和抽象操作,我们可以实现算法的骨架,并让子类自定义具体的实现步骤,从而达到代码复用和解耦的目的。在实际...

    设计模式C++学习之模板方法模式(Template Method)

    模板方法模式(Template Method)是设计模式中行为型模式的一种,它定义了操作中的算法骨架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。这个模式在C++编程中有着...

    20-Template Method.rar

    模板方法(Template Method)设计模式是一种行为型设计模式,它在面向对象编程中扮演着重要的角色。这个模式允许我们定义一个操作中的算法骨架,而将一些步骤延迟到子类中。这样,子类可以不改变一个算法的结构即可...

    TemplateMethod 模式与代码重构

    TemplateMethod(模板方法)设计模式是一种行为设计模式,它在面向对象编程中扮演着重要的角色。这个模式允许我们在抽象类中定义一个算法的框架,同时允许子类在不改变算法结构的情况下重写算法中的特定步骤。通过...

    TemplateMethod Pattern.unitypackage

    TemplateMethod Pattern.unitypackage是一个模板方法模式的小栗子。

    C#中的TemplateMethod模式问题分析

    TemplateMethod模式是一种行为设计模式,它允许在定义算法框架的同时,允许子类为算法的特定步骤提供实现...在实际的软件开发中,TemplateMethod模式是一个非常实用的工具,能够帮助我们构建更加稳定和易于扩展的系统。

    C++设计模式代码资源3_Template Method_模板方法.zip

    在C++设计模式代码资源3_Template Method中,我们可以期待找到一个示例,展示如何在C++中实现模板方法模式。可能包含一个抽象类(如`GameCharacter`),定义了攻击动作的模板方法,以及几个子类(如`Warrior`和`Mage...

    Head First 设计模式 (八) 模板方法模式(Template Method pattern) C++实现

    在这个例子中,`AbstractClass`定义了`templateMethod`模板方法,其中`step1()`是具体实现,而`step2()`和`step3()`作为抽象方法由`ConcreteClass1`和`ConcreteClass2`这两个具体类来实现。这样,不同的具体类可以...

    C++设计模式课件3_Template Method_模板方法.pdf

    模板方法模式(Template Method Pattern)是一种行为型设计模式,它允许我们定义算法的骨架,并将部分步骤推迟到子类中实现。这种模式使得子类可以在不改变算法结构的情况下重新定义算法的某些步骤。 #### 模式背景...

    vue-admin-template-3.8.0.zip

    vue-admin-template前端页面...在开发后台管理项目时,多用户多角色不同权限的场景可以说是非常普遍的。从零开始手写一个后台,要考虑的东西很多,这里直接拿网上大家比较熟悉的vue-admin-template后台模版来进行改造。

    前端项目-template7.zip

    **前端项目-template7.zip** 是一个专为移动设备设计的HTML模板引擎,名为Template7。... **Template7** 是一款轻量...在实际项目中,结合其他前端工具和技术栈,Template7可以帮助你打造更加高效、优雅的前端解决方案。

    .NET设计模式(16):模版方法(TemplateMethod)

    Method模式是比较简单的设计模式之一,但它却是代码复用的一项基本的技术,在类库中尤其重要。变化一直以来都是软件设计的永恒话题,在XP编程中提倡拥抱变化,积极应对。如何更好的去抓住变化点,应对变化?如何更好...

    前端项目-jquery.loadtemplate.zip

    在前端开发中,模板引擎是一种常见的工具,它允许...虽然现在有许多其他现代的前端框架和库提供了更强大的模板功能,但在一些简单的项目或者需要与jQuery紧密集成的场景中,`jquery.loadtemplate` 仍是一个不错的选择。

    学习vue-admin-template,优化了大量融入代码,添加中文注释

    在“学习vue-admin-template,优化了大量融入代码,添加中文注释”这个主题中,我们可以深入探讨以下几个关键知识点: 1. **Vue.js基础知识**:理解Vue的核心概念,如组件化、指令、计算属性、监听器和生命周期钩子...

    Template工程模板_template_

    "Template工程模板_template_"这个标题暗示了一个专门用于创建模板的工程,它可能是为了帮助用户在特定编程语言或框架下初始化一个新的项目。下面将详细解释模板工程模板以及与其相关的知识点。 1. **模板工程的...

    运用Jquery插件Json2Template写的简单项目

    在本文中,我们将深入探讨如何使用Jquery插件Json2Template进行项目开发。Json2Template是一款基于jQuery的库,它允许开发者将JSON数据动态渲染为HTML模板,极大地提高了前端界面的数据展示效率。在学习和应用这个...

    HbaseTemplate 操作hbase

    在IT行业中,尤其是在大数据处理领域,HBase是一个广泛使用的分布式、高性能、列式存储的NoSQL数据库。...在实际项目中,结合Spring的依赖注入和配置管理,能够有效地提升代码的可维护性和可扩展性。

Global site tag (gtag.js) - Google Analytics