1. 程式人生 > >設計模式簡單介紹(java語言)-- 模板方法模式

設計模式簡單介紹(java語言)-- 模板方法模式

設計模式簡單介紹(java語言)– 模板方法模式

模板方法模式的定義

模板方法模式:定義一個操作中的演算法的框架,而將一些步驟延遲到子類中。使得子類可以不改變一個演算法的結構即可重定義該演算法的某些特定步驟。
類圖:
這裡寫圖片描述
類圖中,AbstractClass為抽象模板,它的方法分為兩類:
1.基本方法:基本方法也叫做基本操作,是由子類實現的方法,並且在模板方法被呼叫。
2.模板方法:可以有一個或者幾個,一般是一個具體的方法,也就是一個框架,實現對基本方法的排程,完成固定的邏輯。
注意:為了防止惡意的操作,一般模板方法都加上final關鍵字,不允許被覆寫。

ConcreteClass:具體模板,實現父類所定義的一個或者多個抽象方法,也就是父類定義的基本方法在子類中得以實現。

具體程式碼

public abstract class AbstractClass {
    //基本方法 
    protected abstract void doAnything();

    protected abstract void doSomething();

    public final void templateMethod(){
        /*
         * 呼叫基本方法,完成相關的邏輯
         */
        this.doAnything();
        this.doSomething();
    }
}
public
class ConcreteClass1 extends AbstractClass { @Override protected void doAnything() { // TODO Auto-generated method stub //子類實現具體 } @Override protected void doSomething() { // TODO Auto-generated method stub } } public class ConcreteClass2 extends AbstractClass
{
@Override protected void doAnything() { // TODO Auto-generated method stub //子類實現具體 } @Override protected void doSomething() { // TODO Auto-generated method stub } }

模板模式的優缺點

優點:
封裝不變部分,擴充套件可變部分。把認為不變部分的演算法封裝到父類中實現,而可變部分的則可以通過繼承來繼續擴充套件。
提取公共部分程式碼,便於維護。
行為由父類控制,子類實現。

缺點:
按照設計習慣,抽象類負責宣告最抽象、最一般的事物屬性和方法,實現類負責完成具體的事務屬性和方法,但是模板方式正好相反,子類執行的結果影響了父類的結果,會增加程式碼閱讀的難度。

使用場景

多個子類有共有的方法,並且邏輯基本相同重要、複雜的演算法,可以把核心演算法設計為模板方法,周邊的相關細節功能則由各個子類實現重構時,模板方法是一個經常使用的方法,把相同的程式碼抽取到父類中,然後通過建構函式約束其行為。

應用例項:
1、在造房子的時候,地基、走線、水管都一樣,只有在建築的後期才有加壁櫥加柵欄等差異。 2、西遊記裡面菩薩定好的 81 難,這就是一個頂層的邏輯骨架。 3、spring 中對 Hibernate 的支援,將一些已經定好的方法封裝起來,比如開啟事務、獲取 Session、關閉 Session 等,程式設計師不重複寫那些已經規範好的程式碼,直接丟一個實體就可以儲存。

相關推薦

設計模式簡單介紹java語言-- 模板方法模式

設計模式簡單介紹(java語言)– 模板方法模式 模板方法模式的定義 模板方法模式:定義一個操作中的演算法的框架,而將一些步驟延遲到子類中。使得子類可以不改變一個演算法的結構即可重定義該演算法的某些特定步驟。 類圖: 類圖中,Abstrac

設計模式簡單介紹Java語言-- 工廠方法模式

設計模式簡單介紹(Java語言) – 工廠方法模式 1.工廠方法模式的定義: 工廠方法模式(FACTORY METHOD)是一種常用的物件建立型設計模式,此模式的核心精神是封裝類中不變的部分,提取其中個性化善變的部分為獨立類,通過依賴注入以達到解耦

設計模式簡單介紹java語言-- 建造者模式

設計模式簡單介紹(java語言)– 建造者模式 1. 建造者模式的定義 建造者模式也叫做生成器模式,其定義如下: 將一個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。 通用類圖: 在建造者模中,通常有如下4個角色:

設計模式Java語言-單例模式

  單例模式,簡而言之就是在整個應用程式裡面有且僅有一個例項,在程式的任何時候,任何地方獲取到的該物件都是同一個物件。單例模式解決了一個全域性的類被頻繁建立和銷燬的,或者每次建立或銷燬都需要消耗大量cpu資源的物件的問題。單例模式總的可以分為懶漢模式和餓漢模式,顧名思義,懶漢模式是一個非常懶的漢子,只要你沒有

設計模式十八---模板方法模式

strac string package style prim res 不同的 好的 clas 1、簡介   模板方法模式是類的行為模式。準備一個抽象類,將部分邏輯以具體方法以及具體構造函數的形式實現,然後聲明一些抽象方法來迫使子類實現剩余的邏輯。   不同的子類可以以不同

設計模式十七——模板方法模式

ring next pri cut 限制 pack [] eat 模式 1.描述 定義一個操作中算法的骨架,而將一些步驟延伸到子類當中。模板方法使子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。 2.模式的使用 ·抽象模板(Abstract Template):

C++實現——模板方法模式Template Method Pattern

概述:      我們最近在開發一個支援多種壓縮型別檔案的解壓縮且製作成pdf的一個應用。對我們的架構來說我們需要支援多種壓縮檔案型別,但卻有固定的操作順序(先解壓縮,在讀取裡面的檔案分析、製作pdf)。我們抽取他們的共同點:這些操作的固定順序,把他放到我們的父類裡;他們

設計模式Java語言- 簡單工廠模式

  簡單工廠模式有稱為靜態工廠模式,屬於設計模式中的建立型模式。簡單工廠模式通過對外提供一個靜態方法來統一為類建立例項。簡單工廠模式的目的是實現類與類之間解耦,其次是客戶端不需要知道這個物件是如何被穿創建出來的,只需要呼叫簡單工廠模式的方法來統一建立就可以了,從而明確了各個類的職責。   一、建立簡單工廠模式

設計模式Java隨筆—單例模式

單例模式(Singleton Pattern):5種建立型模式中的一種,有關單例模式的所有建立方法參考:Java單例模式——並非看起來那麼簡單(總結不易,感謝!),本文中,我只對開發中常用的兩種(多執行緒)方法和Java特有的列舉法進行程式碼複寫。 首先,還是貼一下單例的定

各種高階語言簡單介紹持續更新

public class ShapeFactory { public static <T> T getClass(Class<? extends T> clazz) {

設計模式解密4- 模板方法模式

編程人員 自己 ack 層次 check target hub 提取 images 1、簡介 定義:一個操作中算法的框架,而將一些步驟延遲到子類中,使得子類可以不改變算法的結構即可重定義該算法中的某些特定步驟。 模板方法模式,一般是為了統一子類的算法實現步驟,所使用

Android平臺Camera實時濾鏡實現方法探討(十)--代碼地址以及簡單介紹20160118更新

div iss 將在 spa 方法 target 用途 net dsm 簡單做了個相機和圖片編輯模塊,時間原因非常多功能還沒有做。尚有BUG,見諒,將在以後抽時間改動 代碼地址 PS:請點個Star^-^ -----------------------

PAT刷題 Java語言

group ron asn extra rms cas should 語言 () 1001. A+B Format (20) 時間限制 400 ms 內存限制 65536 kB 代碼長度限制 16000 B 判題程序 Standard 作者 CHEN, Y

P1422小玉家的電費JAVA語言

package 順序與分支; /* * 題目描述 夏天到了,各家各戶的用電量都增加了許多,相應的電費也交的更多了。 小玉家今天收到了一份電費通知單。小玉看到上面寫:據閩價電[2006]27號規定, 月用電量在150千瓦時及以下部分按每千瓦時0.4463元執行, 月用電量在151~400千瓦時的

P1423_小玉在游泳JAVA語言

 題目描述 小玉開心的在游泳,可是她很快難過的發現,自己的力氣不夠,游泳好累哦。 已知小玉第一步能遊2米,可是隨著越來越累,力氣越來越小, 她接下來的每一步都只能游出上一步距離的98%。 現在小玉想知道,如果要游到距離x米的地方,她需要遊多少步呢。 請你程式設計解決這個問題。 輸入輸出

P1008_三連擊JAVA語言

/*  * 題目描述 將1,2,⋯,9共9個數分成3組, 分別組成3個三位數,且使這3個三位數構成1:2:3的比例,試求出所有滿足條件的3個三位數。 輸入輸出格式 輸入格式: 木有輸入 輸出格式: 若干行,每行3個數字。按照每行第1個數字升序排列。  */ publi

設計模式模板方法模式

模板方法模式:定義一個操作中的 演算法的骨架,而將一些步驟延遲到子類中,模板方法使得子類可以不改變一個演算法 的結構即可重定義該演算法的某些特定步驟 用途:當我們要完成在某一細節層次一致的一個過程或一系列步驟,但其個別步驟在更詳盡的層次上的思想可能不同時我們通常考慮用模板方法模式來處理。 模板方

P1200_你的飛碟在這兒JAVA語言

題目描述 眾所周知,在每一個彗星後都有一隻UFO。這些UFO時常來收集地球上的忠誠支持者。 不幸的是,他們的飛碟每次出行都只能帶上一組支持者。因此,他們要用一種聰明的方案讓這些小組提前知道誰會被彗星帶走。 他們為每個彗星起了一個名字,通過這些名字來決定這個小組是不是被帶走的那個特定的小組(你認為是誰

設計模式---- 模板方法模式

基本操作 int draw 鉤子 鉤子方法 重新定義 工廠 一個 temp 模板設計模式 1、簡介     模板模式定義了一個操作中的算法骨架,將某些步驟延遲到子類中實現。這樣,新的子類可以在不改變一個算法結構的前提下重新定義該算法的某些特征步驟。 2、核心   處理某個流

設計模式模板方法模式

老師在黑板上抄題目,我們要先抄題目,再做答案。請把抄題目的程式寫出來。 第一版(重複=易錯+難改) 程式碼結構圖: 學生甲抄的試卷類: // 學生甲抄的試卷 class TestPaperA{ // 試題1 public void TestQu