J2EE設(shè)計(jì)模式之Template
Template定義:
定義一個(gè)操作中算法的骨架,將一些步驟的執(zhí)行延遲到其子類(lèi)中.
其實(shí)Java的抽象類(lèi)本來(lái)就是Template模式,因此使用很普遍.而且很容易理解和使用,我們直接以示例開(kāi)始:
- public abstract class Benchmark
 - {
 - /**
 - * 下面操作是我們希望在子類(lèi)中完成
 - */
 - public abstract void benchmark();
 - /**
 - * 重復(fù)執(zhí)行benchmark次數(shù)
 - */
 - 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;
 - }
 - }
 - }
 
在上例中,我們希望重復(fù)執(zhí)行benchmark()操作,但是對(duì)benchmark()的具體內(nèi)容沒(méi)有說(shuō)明,而是延遲到其子類(lèi)中描述:
- public class MethodBenchmark extends Benchmark
 - {
 - /**
 - * 真正定義benchmark內(nèi)容
 - */
 - public void benchmark() {
 - for (int i = 0; i < Integer.MAX_VALUE; i++){
 - System.out.printtln("i="+i);
 - }
 - }
 - }
 
至此,Template模式已經(jīng)完成,是不是很簡(jiǎn)單?看看如何使用:
- Benchmark operation = new MethodBenchmark();
 - long duration = operation.repeat(Integer.parseInt(args[0].trim()));
 
也許你以前還疑惑抽象類(lèi)有什么用,現(xiàn)在你應(yīng)該徹底明白了吧? 至于這樣做的好處,很顯然啊,擴(kuò)展性強(qiáng),以后Benchmark內(nèi)容變化,我只要再做一個(gè)繼承子類(lèi)就可以,不必修改其他應(yīng)用代碼。
【編輯推薦】















 
 
 
 
 
 
 