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)用代碼。
【編輯推薦】