Java設(shè)計模式之模板模式(Template模式)介紹
Template模式定義:定義一個操作中算法的骨架,將一些步驟的執(zhí)行延遲到其子類中。
其實Java的抽象類本來就是Template模式,因此使用很普遍。而且很容易理解和使用,我們直接以示例開始:
public abstract class Benchmark
{
/**
* 下面操作是我們希望在子類中完成
*/
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()操作,但是對benchmark()的具體內(nè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)完成,是不是很簡單?看看如何使用:
Benchmark operation = new MethodBenchmark();
long duration = operation.repeat(Integer.parseInt(args[0].trim()));
System.out.println("The operation took " + duration + " milliseconds");
也許你以前還疑惑抽象類有什么用,現(xiàn)在你應(yīng)該徹底明白了吧?至于這樣做的好處,很顯然啊,擴(kuò)展性強(qiáng),以后Benchmark內(nèi)容變化,我只要再做一個繼承子類就可以,不必修改其他應(yīng)用代碼。
相關(guān)文章
Java中線程組ThreadGroup與線程池的區(qū)別及示例
這篇文章主要介紹了Java中線程組與線程池的區(qū)別及示例,ThreadGroup是用來管理一組線程的,可以控制線程的執(zhí)行,查看線程的執(zhí)行狀態(tài)等操作,方便對于一組線程的統(tǒng)一管理,需要的朋友可以參考下2023-05-05
MyBatis SELECT基本查詢實現(xiàn)方法詳解
這篇文章主要介紹了MyBatis SELECT基本查詢實現(xiàn)方法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-08-08
Java通過Lambda表達(dá)式實現(xiàn)簡化代碼
我們在編寫代碼時,常常會遇到代碼又長又重復(fù)的情況,就像調(diào)用第3方服務(wù)時,每個方法都差不多,?寫起來啰嗦,?改起來麻煩,?還容易改漏,所以本文就來用Lambda表達(dá)式簡化一下代碼,希望對大家有所幫助2023-05-05
MyBatis注解開發(fā)之實現(xiàn)自定義映射關(guān)系和關(guān)聯(lián)查詢
本文主要詳細(xì)介紹了MyBatis注解開發(fā)中,實現(xiàn)自定義映射關(guān)系和關(guān)聯(lián)查詢,文中有詳細(xì)的代碼示例,對學(xué)習(xí)MyBatis有一定的參考價值,需要的朋友可以參考閱讀2023-04-04

