您好,登錄后才能下訂單哦!
文章首發:
行為型模式:模板方法
十一大行為型模式之一:模板方法。
姓名 :模板方法
英文名 :Template Method Pattern
價值觀 :在我的掌控下,任由你發揮
個人介紹 :
Define the skeleton of an algorithm in an operation,deferring some steps to subclasses. Template Method lets subclasses redefine certain steps of an algorithm without changing the algorithm's structure.
定義一個操作中的算法的框架,而將一些步驟延遲到子類中。使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。
(來自《設計模式之禪》)
解釋一下上面的介紹,意思是由父類來定義框架,讓子類來具體實現。
剛過完春節,大家都買新鞋了么?今天要講的故事和鞋子有關。一雙鞋子從表面來看,由鞋底、鞋墊、鞋面、鞋帶組成,同一系列的鞋子這幾個部分都是一樣的,用同樣的材料做出來,不同系列的鞋子就大相徑庭了。根據模板方法模式,組裝一雙鞋子的制造過程可以歸并為固定的框架,至于用什么材料,那由每個系列的鞋子去具體實現。我們先看定義組裝鞋子的框架代碼。
/**
* 定義鞋子制造的工序框架
*/
abstract class ShoeInstallTemplate {
public abstract void installSole();
public abstract void installInsole();
public abstract void installVamp();
public abstract void installShoelace();
public void installShot(){
System.out.println("組裝一雙鞋,步驟如下:");
// 組裝鞋底
installSole();
// 組裝鞋墊
installInsole();
// 組裝鞋面
installVamp();
// 組裝鞋帶
installShoelace();
}
}
定義了一個組裝鞋子框架的抽象類 ShoeInstallTemplate,里面有 4 個工序未具體實現,由鞋子制造商去實現,因為只有鞋子制造商才知道鞋子要用什么材料來做。
下面舉 2 個比較出名的鞋子:Adidas 的 Boost 系列和 Nike 的 Jordan 系列。下面分別實現這 2 個系列鞋子的制造代碼。
/**
* Adidas Boost 鞋制造
*/
class AdidasBoostShoeInstall extends ShoeInstallTemplate {
@Override
public void installSole() {
System.out.println("組裝白色 Boost 鞋底");
}
@Override
public void installInsole() {
System.out.println("組裝黑色 Boost 鞋墊");
}
@Override
public void installVamp() {
System.out.println("組裝黑色 Boost 鞋面");
}
@Override
public void installShoelace() {
System.out.println("組裝黑色 Boost 鞋帶");
}
}
/**
* Nike Jordan 鞋制造
*/
class NikeJordanShoeInstall extends ShoeInstallTemplate {
@Override
public void installSole() {
System.out.println("組裝黑色 Jordan 鞋底");
}
@Override
public void installInsole() {
System.out.println("組裝黑色 Jordan 鞋墊");
}
@Override
public void installVamp() {
System.out.println("組裝紅色 Jordan 鞋面");
}
@Override
public void installShoelace() {
System.out.println("組裝紅色 Jordan 鞋帶");
}
}
實現了制造商制造鞋子的代碼之后,我們通過代碼測試怎么制造 Boost 和 Jordan 鞋子。
public class TemplateMethodTest {
public static void main(String[] args) {
ShoeInstallTemplate adidasBoost = new AdidasBoostShoeInstall();
adidasBoost.installShot();
ShoeInstallTemplate nikeJordan = new NikeJordanShoeInstall();
nikeJordan.installShot();
}
}
打印結果:
組裝一雙鞋,步驟如下:
組裝白色 Boost 鞋底
組裝黑色 Boost 鞋墊
組裝黑色 Boost 鞋面
組裝黑色 Boost 鞋帶
組裝一雙鞋,步驟如下:
組裝黑色 Jordan 鞋底
組裝黑色 Jordan 鞋墊
組裝紅色 Jordan 鞋面
組裝紅色 Jordan 鞋帶
模板方法模式就這么簡單。是不是掌握了?
代碼:
Template Method Pattern
模板方法是一個比較實用的模式,為什么說實用呢?舉個現實的例子,Java 能有如今的發展,離不開各大開源框架,比如 Dubbo,有看過源碼的朋友就知道,里面大量代碼運用了模板方法設計模式,為什么 Dubbo 可以支持很多種注冊中心?其實本質就是用了模板方法設計模式,使得可以擴展多種注冊中心。掌握好模板方法,對讀源碼有非常大的幫助,很多人包括我在內,在剛開始閱讀源碼的時候,有相當長的一段時間懷疑人生,怎么這些代碼那么繞?調來調去的。當你了解了常用的設計模式之后,看源代碼就可以直截了當的知道是用什么設計模式,為什么用這個設計模式?原來是為了什么什么。。。有了這層思考,就像有一條線將以前散落在各地的知識點連接起來,成了可以推敲的知識。
推薦閱讀:
單一職責原則(方法:修改名字還是密碼?接口:洗碗、買菜還是倒垃圾?類:注冊、登錄和注銷)
里氏替換原則(我兒來自新東方烹飪)
依賴倒置原則(摳門的飯店老板)
接口隔離原則(小伙子的作坊)
迪米特法則(手機上看電子書)
開閉原則(社保這點事)
創建型模式:單例模式(小明就只有 1 輛車)
創建型模式:工廠方法(小明家的車庫)
創建型模式:抽象工廠(寶馬車就得用寶馬輪胎和寶馬方向盤)
創建型模式:建造者模式(湯這么煲)
創建型模式:原型模式(復印書籍)
公眾號后臺回復『大禮包』獲取 Java、Python、IOS 等教程
加個人微信備注『教程』獲取架構師、機器學習等教程
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。