设计形式之Template
设计模式之Template
模板方法设计模式
定义一个操作中算法的骨架,将一些步骤的执行延迟到其子类中。
父类方法中间的某段代码不确定,留给子类干,就用模板方法设计模式。
使用Java的抽象类时,就经常会使用到Template模式,因此Template模式使用很普遍.而且很容易理解和使用。
一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现。
各子类中公共的行为应被提取出来并集中到一个公共父类中以避免代码重复。其实这可以说是一种好的编码习惯了。
如果你不愿子类来修改你的模板方法定义的框架,你可以采用两种方式来做:
1、可以在API中不体现出你的模板方法;
2、可以将你的模板方法置为final就可以了。
demo:
父类:
public abstract class BenchMark { public final long repeat(int count){ long time = 0; if(count < 0){ return 0; }else { long startTime = System.currentTimeMillis(); for(int i =0; i<count;i++){ method(); } long endTime = System.currentTimeMillis(); time = endTime - startTime; } return time; } public abstract void method(); }
子类:
public class BenchMarkMethod extends BenchMark{ @Override public void method() { try { Thread.sleep(2000); System.out.println("sleep for 2s"); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void main(String[] args) { BenchMark bench = new BenchMarkMethod(); long time = bench.repeat(3); System.out.println(time); }/**OutPrint: * sleep for 2s * sleep for 2s * sleep for 2s * 6000 */ }
使用模板方法模式可以将代码的公共行为提取出来,达到复用的目的。而且,在模板方法模式中,是由父类的模板方法来控制子类中的具体实现。这样你在实现子类的时候,根本不需要对业务流程有太多的了解。
参考:http://wenku.baidu.com/view/b3084581d4d8d15abe234e0e.html