設計模式之 模版模式

2021-08-29 15:59:20 字數 1494 閱讀 4790

在我們平時的編碼工作中,經常會有一些流程步驟基本相同,只是中間有部分細節不同的業務流程,比如我們自己要實現乙個基於redis快取的模版方法,在redis中存在指定值時,則返回redis中快取的資料;如果redis中不存在,則查詢db,並把查詢所得快取起來,並返回查詢所得。這個例子就是用模版模式再好不過了,直接上**:

1.定義模版類

@component

public abstract class rediscachetemplate else else }}

} else

} // 返回查詢資料

return target;

} /**

* 鉤子方式,供使用者實現,判斷是否要查詢資料庫,預設不查db

* * @return false

*/protected boolean issearchdb() ;

/*** 鉤子方法,設定過期時間

* * @return 預設-1l:不過期

*/protected long timeout() ;

/*** 設定過期時間單位

* * @return 預設timeunit.hours

*/protected timeunit timeouttimeunit() ;

/*** 檢視db邏輯,供使用者實現

* * @return db查詢結果

*/protected abstract t searchfromdb();

}

通常,因為模版方式需要一些鉤子方法,或者其他需要業務方自己實現的具體方法,我們一般將模版類定義為抽象類,提供供業務實現的抽象方法,或者定義乙個protect的方法,返回預設值,必要時由業務方重寫該方法。

2.業務方定製具體細節

@component

public class servicebootrediscachetemplate extends rediscachetemplate

//若需要查詢db,則實現查詢db的邏輯

@suppresswarnings("unchecked")

@override

protected taskresponsedto searchfromdb()

}

3.使用我們的快取模版

public string test()

乙個簡單的模版模式就實現了,是不是很簡單!

補充2點:

1.如果查詢db需要引數,也很簡單,提供的抽象方法帶引數即可。也可以在我們具體實現的servicebootrediscachetemplate 中定義需要的引數變數,提供set方法,也可實現該功能

2.我們第一次查詢快取,如果沒有命中的話,我們就會查詢資料庫,如果查詢資料庫也沒有滿足條件的資料,即db查詢返回null,如果不設定預設值在緩衝中,則每次這樣的查詢都會走db,我們的快取模版也就沒有意義了。最好的做法是,如果db查詢不到,我們在快取中設定乙個指定的預設值,業務方根據返回的值做相應的業務邏輯。

設計模式之模版模式

模板方法模式是類的行為模式。準備乙個抽象類,將部分邏輯以具體方法以及具體建構函式的形式實現,然後宣告一些抽象方法來迫使子類實現剩餘的邏輯。不同的子類可以以不同的方式實現這些抽象方法,從而對剩餘的邏輯有不同的實現。這就是模板方法模式的用意。模版方法模式 父類宣告抽象方法,子類做具體實現 父類引用指向子...

設計模式 模版模式

模板方法模式是類的行為模式。準備乙個抽象類,將部分邏輯以具體方法以及具體建構函式的形式實現,然後宣告一些抽象方法來迫使子類實現剩餘的邏輯。不同的子類可以以不同的方式實現這些抽象方法,從而對剩餘的邏輯有不同的實現。這就是模板方法模式的用意。模板類public abstract class templa...

JAVA設計模式 模版模式

建立乙個自定義列表 如何建立乙個註腳 注釋也是必不可少的 katex數學公式 新的甘特圖功能,豐富你的文章 uml 圖表 flowchart流程圖 匯出與匯入 你好!這是你第一次使用markdown編輯器所展示的歡迎頁。如果你想學習如何使用markdown編輯器,可以仔細閱讀這篇文章,了解一下mar...