模板設計模式 23種設計模式之模板設計模式

2021-10-12 09:10:22 字數 2753 閱讀 6332

1.模板方法模式(template method pattern),又叫模板模式(template pattern),在乙個抽象類公開定義了執行它的模板。它的子類可以俺需要重寫方法實現,但呼叫將以抽象類中定義的方式進行;

2.簡單說,模板方法模式定義乙個操作中的演算法的骨架,而降一些步驟延遲到子類中,使得子類可以不改變乙個演算法的結構,就可以重定義該演算法的某些特定步驟;

3.這些型別的設計模式屬於行為型模式。

模板模式主要是由抽象模板(abstarct template)角色和具體的模板(concrete template)角色組成。

1.抽象模板(abstract template): 定義了乙個或多個抽象操作,以便讓子類實現。這些抽象操作叫做基本操作,它們是乙個頂級邏輯的組成步驟;定義並實現了乙個模板方法。這個模板方法一般是乙個具體方法,它給出了乙個頂級邏輯的骨架,而邏輯的組成步驟在相應的抽象操作中,推遲到子類實現。頂級邏輯也有可能呼叫一些具體方法。

2.具體模板(concrete template): 實現父類所定義的乙個或多個抽象方法,它們是乙個頂級邏輯的組成步驟;每乙個抽象模板角色都可以有任意多個具體模板角色與之對應,而每乙個具體模板角色都可以給出這些抽象方法(也就是頂級邏輯的組成步驟)的不同實現,從而使得頂級邏輯的實現各不相同。

以下將以不同事務放入冰箱為例

冰箱類

/** * 冰箱抽象類 * * @author api * @data 2020/3/24 1:08 */public abstract class refrigerator     //第一步開啟冰箱門    private void opendoor()     //第二步把物品放入進冰箱    abstract void putinto();    //第三步關閉冰箱門    private void close() }
大象具體實現類

/** * 大象,具體的實現子類 * * @author api * @data 2020/3/24 1:07 */public class elephant extends refrigerator }
豬具體實現類

/** * 豬,具體的實現子類 * * @author api * @data 2020/3/24 1:07 */public class pig extends refrigerator}
測試類

/** * 測試類 * * @author api * @data 2020/3/24 1:07 */public class client }
執行結果為

開啟冰箱門把豬放進去關閉冰箱門----------------------------------開啟冰箱門把大象放進去關閉冰箱門
在模板方法模式的父類中,我們可以定義乙個方法,它預設不做任何事情,子類可以視情況要不要覆蓋,該方法稱為"鉤子"。

**上述案例把豬和大象放入了冰箱,此時,我需要看一下它們的狀況,並且不關冰箱門,步驟將忽略第二步和第三步

冰箱抽象類

/** * 冰箱抽象類 * * @author api * @data 2020/3/24 1:08 */public abstract class refrigerator     }    //第一步開啟冰箱門    private void opendoor()     //第二步把物品放入進冰箱    abstract void putinto();    //第三步關閉冰箱門    private void close()     //鉤子方法,決定是否關閉冰箱門    public boolean hook() }
具體的實現子類

/** * 大象,具體的實現子類 * * @author api * @data 2020/3/24 1:07 */public class elephant extends refrigerator }
具體的實現子類

/** * 豬,具體的實現子類 * * @author api * @data 2020/3/24 1:07 */public class pig extends refrigerator }
具體的實現子類

/** * 打卡冰箱門,不幹任何事 * @author api * @data 2020/3/24 1:31 */public class watch extends refrigerator     @override    public boolean hook() }
測試類

/** * 測試類 * * @author api * @data 2020/3/24 1:07 */public class client }
執行結果

開啟冰箱門把豬放進去關閉冰箱門----------------------------------開啟冰箱門把大象放進去關閉冰箱門----------------------------------開啟冰箱門
優點

1.擴充套件性好,對不變的**進行封裝,對可變的進行擴充套件;

2.可維護性好,因為將公共**進行了提取,使用的時候直接呼叫即可。

缺點每乙個不同的實現都需要乙個子類來實現,導致類的個數增加,會使系統變得複雜。

1.有多個子類共有邏輯相同的方法;

2.重要的、複雜的方法,可以考慮作為模板方法。

23種設計模式 模板模式

在軟體構建過程中,對於某一項任務,它常常有穩定的整體操作結構,但各個子步驟卻有很多改變的需求,或者由於固有的原因 比如說框架與應用之間的關係 而無法和任務的整體結構同時實現。如何在確定穩定操作的前提下,來靈活應對各個子步驟的變化或者晚期的需求?定義乙個操作中的演算法的骨架 穩定 而將一些步驟延遲 變...

23種設計模式 模板方法模式

參考文件 通常叫模板方法模式定義乙個演算法的骨架,並允許子類為乙個或者多個步驟提供實現。能夠使得子類可以在不改變演算法結構的情況下,重新定義演算法的某些步驟。屬於行為性設計模式 一次性實現乙個演算法的不變的部分,並將可變的部分交給子類來實現 各子類中公共的行為被提取出來並集中到乙個公共的父類當中,從...

23種設計模式之 工廠設計模式

前言 記得大二時上過一門設計模式的課,當時聽的那叫乙個懵逼。如今工作半年了,想把東西再撿起來,順便記錄一下。工廠模式是平時接觸的多一點的,就從工廠模式開始吧 什麼是工廠設計模式?工廠設計模式,顧名思義,就是用來生產物件的,是一種建立型設計模式。在物件導向語言中,萬物皆物件,這些物件都需要建立,如果建...