## 模板設計模式
###
定義一個操作中的算法骨架,將算法的一些步驟延遲到子類中,使得子類可以不改變改算法結構的情況下重新定義該算法的某些特定步驟,屬于行為模式。
###
## 應用場景
###
有多個子類共有邏輯相同的方法,可以考慮作為模板方法
###
設計一個系統時知道了算法所需的關鍵步驟且確定了這些步驟的執行順序,但某些步驟的具體實現還未知,可以延遲到子類當中進行。
###
## 角色
###
**抽象模板**:定義?個模板?法,這個模板?法?般是?個具體?法,給出?個頂級算法?架,?邏輯?架的組成步驟在相應的抽象操作中,推遲到?類實現。
###
**模板方法**:定義了算法的?架,按某種順序調?其包含的基本?法
###
基本方法:是整個算法中的?個步驟,包括抽象?法和具體?
抽象?法:在抽象類中申明,由具體?類實現。
具體?法:在抽象類中已經實現,在具體?類中可以繼承或重寫它。
###
**具體模板**(Concrete Template):實現?類所定義的?個或多個抽象?法,它們是?個頂級算法邏輯的組成步驟
###

###
## 具體實現(云效代碼study-java項目當中設計模式當中有代碼案例)
###
**抽象模板**
~~~
package com.goldnecis.設計模式.模版模式.design;
//1、首先定義一個抽象模板 定義一些模板方法
public abstract class AbstractProjectManager {
//1.1、定義一個基本方法 是整個的執行步驟 里面的調用可以包括抽象方法和具體方法
public final void processProject(){
//4、像review()、design()這兩個方法都是實現了的具體的方法 在子類當中可直接使用因為被繼承了 實力化子類之后也可以調用夫類的processProject()方法
review();
design();
//5、像下面這些抽象方法在子類當中去實現了
// AbstractProjectManager projectManager = new PayServiceProjectManager();
// AbstractProjectManager projectManager = new UserServiceProjectManager();
// 所以都可以通過processProject()父類的方法去找到具體子類當中實現了的具體實現方法
coding();
test();
online();
}
//1.2、我們可以在抽象類當中定義一些具體的實現方法供子類當中去調用
//各個項目都需要評審
public void review(){
System.out.println("項目需求評審");
}
//1.2、我們可以在抽象類當中定義一些具體的實現方法供子類當中去調用
//各個項目都需要設計
public void design(){
System.out.println("UI UE進行設計");
}
//1.3、對于沒有共性的方法我們可以定義為抽象方法 在子類當中去實現個性化的操作
//抽象方法 由具體子類進行實現 編碼耗時不一樣
public abstract void coding();
//1.3、對于沒有共性的方法我們可以定義為抽象方法 在子類當中去實現個性化的操作
//抽象方法 由具體子類進行實現測試有多種
public abstract void test();
//1.3、對于沒有共性的方法我們可以定義為抽象方法 在子類當中去實現個性化的操作
//抽象方法 由具體子類進行實現 上線
public abstract void online();
}
~~~
**具體抽象模板**
###

###
**調用:**

- 設計模式六大原則
- 常見的三大設計模式分類
- 創建型模式之單例模式
- 單例模式之懶漢
- 單例模式之餓漢
- 單例模式之如何選擇懶漢餓漢
- 什么情況下使用單例模式
- 創建型模式之工廠模式
- 簡單工廠模式
- 工廠方法模式
- 抽象工廠模式
- 創建型模式之原型模式
- 創建型模式之建造者模式
- 結構型模式之適配器模式
- 接口的適配器模式
- 類的適配器模式
- 結構型模式之橋接模式
- 結構型模式之橋接模式和適配器模式的區別
- 結構型模式之裝飾器模式
- 結構型模式之代理模式
- 結構模式之外觀模式
- 結構模式之享元模式
- 行為模式之策略模式
- 行為模式之模板模式
- 行為模式之觀察者模式
- 行為模式之責任鏈模式
- 行為模式之命令模式
- 行為模式之迭代器模式
- 行為模式之備忘錄模式
- 行為模式之狀態模式