模板模式總結篇java
在上一篇《設計模式之模板模式引導篇》中,咱們使用了泡咖啡和泡茶的平常小場景講解了模板模式的原理。本篇,咱們就結合這個小案例,來對模板模式進行總結。算法
本文出自《凱哥學設計模式》系列教程。做者:凱哥Java(kaigejava)設計模式
凱哥我的博客:www.kaigejava.comide
一:模板模式定義(或內容)spa
在上一篇中,咱們知道泡茶和泡咖啡都須要五個步驟。這五個步驟,其實就是算法骨架。設計
在具體是泡咖啡仍是泡茶,是加牛奶仍是加檸檬的時候,把這兩個具體步驟延遲到具體真的子類中來實現了。這樣就能夠在不修改泡茶或泡咖啡的算法結構下,實現特定步驟。orm
總結模板模式定義:教程
先定義一個操做中的算法骨架,而將算法的某一個或者某些步驟的具體實現延遲到了子類中來實現,使得子類能夠在不修改當前算法的結構狀況下,從新定義當前算法的某些特定步驟。博客
模板模式屬於行爲模式的一種it
二:角色
抽象的基類
實現某些具體步驟的子類
關鍵代碼:公共的代碼在基類中實現(如:燒水、倒入杯中、送個客人這三個步驟就在基類hotdrink中實現的)
其餘步驟在具體子類中實現(如:是泡茶仍是泡咖啡粉就是在具體的子類中實現的)
三:使用場景
在軟件設計中,有些功能很相似,只是在某些環節不一樣而已。大多數環節都是相同的時候,可使用模板模式。
將通用的算法或者步驟抽取到抽象類中,在具體子類中實現具體特定的操做
四:優缺點
優勢:
封裝不變的部分,將不變的部分抽取出來;
擴展可變部分,將可變的設置抽象方法,讓具體子類來實現。
抽取的公共代碼,便於後期維護
行爲有基類來控制,具體操做有子類實現。
缺點:
每個不一樣的實現都須要有一個子類來實現,這樣就會致使類的數量大大的增長,使得系統更加龐大。
須要注意的地方:
爲了防止算法骨架被惡意的破壞或者惡意的操做,通常在使用模板模式的時候,模板方法都會加上final這個關鍵字來限制。