在模板模式(template pattern)中,乙個抽象類公開定義了執行它的方法的方式/模板。它的子類可以按需要重寫方法實現,但呼叫將以抽象類中定義的方式進行。這種型別的設計模式屬於行為型模式。
優點:
缺點:每乙個不同的實現都需要乙個子類來實現,導致類的個數增加,使得系統更加龐大。
使用場景:
基本介紹
模板方法模式(template method pattern),又叫模板模式(template pattern),z 在乙個抽象類公開定義了執行它的方法的模板。它的子類可以按需要重寫方法實現,但呼叫將以抽象類中定義的方式進行。
簡單說,模板方法模式 定義乙個操作中的演算法的骨架,而將一些步驟延遲到子類中,使得子類可以不改變乙個演算法的結構,就可以重定義該演算法的某些特定步驟
這種型別的設計模式屬於行為型模式。
模板方法模式原理類圖
對原理類圖的說明-即(模板方法模式的角色及職責)
abstractclass 抽象類:類中實現了模板方法(template),定義了演算法的骨架,具體子類需要去實現 其它的抽象方法 operationr2,3,4
concreteclass:實現抽象方法 operationr2,3,4, 以完成演算法中特點子類的步驟
照葫蘆畫瓢
乙個遊戲模板,可以畫出千千萬萬個遊戲。
豆漿製作問題
編寫製作豆漿的程式,說明如下:
製作豆漿的流程 選材--->新增配料--->浸泡--->放到豆漿機打碎
通過新增不同的配料,可以製作出不同口味的豆漿
選材、浸泡和放到豆漿機打碎這幾個步驟對於製作每種口味的豆漿都是一樣的
請使用「模板方法模式」完成
(說明:因為模板方法模式,比較簡單,很容易就想到這個方案,因此就直接使用,不再使用傳統的方案來引出模板方法模式)
應用例項要求
編寫製作豆漿的程式,說明如下:
製作豆漿的流程 選材--->新增配料--->浸泡--->放到豆漿機打碎通過新增不同的配料,可以製作出不同口味的豆漿
選材、浸泡和放到豆漿機打碎這幾個步驟對於製作每種口味的豆漿都是一樣的(紅豆、花生豆漿。。。)
思路分析和**(類圖)
**實現
package com.nemo.template;
//抽象類,表示豆漿
public abstract class soyamilk
//選材料
void select()
//新增不同的配料, 抽象方法, 子類具體實現
abstract void addcondiments();
//浸泡
void soak()
void beat()
}
package com.nemo.template;
public class peanutsoyamilk extends soyamilk
}
package com.nemo.template;
public class redbeansoyamilk extends soyamilk
}
package com.nemo.template;
public class client
}
模板方法模式的鉤子方法
在模板方法模式的父類中,我們可以定義乙個方法,它預設不做任何事,子類可以視情況要不要覆蓋它,該方法稱為「鉤子」。
還是用上面做豆漿的例子來講解,比如,我們還希望製作純豆漿,不新增任何的配料,請使用鉤子方法對前面的模板方法進行改造
**演示:
package com.nemo.template.improve;
//抽象類,表示豆漿
public abstract class soyamilk
soak();
beat();
}//選材料
void select()
//新增不同的配料,抽象方法,子類具體實現
abstract void addcondiments();
//浸泡
void soak()
void beat()
//鉤子方法,決定是否需要新增配料
boolean customerwantcondiments()
}
spring ioc 容器初始化時運用到的模板方法模式
**分析+角色分析+說明類圖
針對原始碼的類圖(說明層次關係)
基本思想是:演算法只存在於乙個地方,也就是在父類中,容易修改。需要修改演算法時,只要修改父類的模板方法或者已經實現的某些步驟,子類就會繼承這些修改
實現了最大化**復用。父類的模板方法和已實現的某些步驟會被子類繼承而直接使用。
既統一了演算法,也提供了很大的靈活性。父類的模板方法確保了演算法的結構保持不變,同時由子類提供部分步驟的實現。
該模式的不足之處:每乙個不同的實現都需要乙個子類實現,導致類的個數增加,使得系統更加龐大
一般模板方法都加上 final 關鍵字, 防止子類重寫模板方法.
模板方法模式使用場景:當要完成在某個過程,該過程要執行一系列步驟 ,這一系列的步驟基本相同,但其個別步驟在實現時 可能不同,通常考慮用模板方法模式來處理
模板設計模式 設計模式 模板方法模式
在模板模式 template pattern 中,乙個抽象類公開定義了執行它的方法的方式 模板。它的子類可以按需要重寫方法實現,但呼叫將以抽象類中定義的方式進行。這種型別的設計模式屬於行為型模式。首先需要一定抽象的定義,沒有具體的實現,但是在抽象類的行為中,子類去程序這個抽象類,重寫抽象方法,實現不...
設計模式 模板方法設計模式
物件導向,萬物皆物件,用乙個雷來反應現實生活中的東西。比如銀行系統,業務公升級 活期 定期,差別很小,就加判斷 違背單一職責 差別比較多,尤其是模擬較複雜,型別拆分下。拆分之後,自然就有父類,重用。利率 每個客戶端都有利率,但是各不一樣 抽象方法。show 不分客戶端是一樣的,個別客戶端是不一樣的 ...
設計模式 模板方法模式
模板方法模式 類庫中大量使用,例如idbconnection介面 dbconnection抽象類 派生的sqlconnection和派生的oledbconnection就是使用了這種方法 1。介面,到能做的定義進來。一種規範 2.把共同的部分進去分離出來,放到乙個抽象的父類去實現.3.子類中實現 不...