行為型模式:模板方法

文章首發(fā):

公司主營業(yè)務:成都網(wǎng)站制作、成都網(wǎng)站建設、外貿(mào)營銷網(wǎng)站建設、移動網(wǎng)站開發(fā)等業(yè)務。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)推出覃塘免費做網(wǎng)站回饋大家。

行為型模式:模板方法

行為型模式:模板方法

十一大行為型模式之一:模板方法。

簡介

姓名:模板方法

英文名:Template Method Pattern

價值觀:在我的掌控下,任由你發(fā)揮

個人介紹

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.
定義一個操作中的算法的框架,而將一些步驟延遲到子類中。使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。
(來自《設計模式之禪》)

解釋一下上面的介紹,意思是由父類來定義框架,讓子類來具體實現(xiàn)。

你要的故事

剛過完春節(jié),大家都買新鞋了么?今天要講的故事和鞋子有關。一雙鞋子從表面來看,由鞋底、鞋墊、鞋面、鞋帶組成,同一系列的鞋子這幾個部分都是一樣的,用同樣的材料做出來,不同系列的鞋子就大相徑庭了。根據(jù)模板方法模式,組裝一雙鞋子的制造過程可以歸并為固定的框架,至于用什么材料,那由每個系列的鞋子去具體實現(xiàn)。我們先看定義組裝鞋子的框架代碼。

/**
 * 定義鞋子制造的工序框架
 */
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 個工序未具體實現(xiàn),由鞋子制造商去實現(xiàn),因為只有鞋子制造商才知道鞋子要用什么材料來做。
下面舉 2 個比較出名的鞋子:Adidas 的 Boost 系列和 Nike 的 Jordan 系列。下面分別實現(xiàn)這 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 鞋帶");
    }
}

實現(xiàn)了制造商制造鞋子的代碼之后,我們通過代碼測試怎么制造 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

總結

模板方法是一個比較實用的模式,為什么說實用呢?舉個現(xiàn)實的例子,Java 能有如今的發(fā)展,離不開各大開源框架,比如 Dubbo,有看過源碼的朋友就知道,里面大量代碼運用了模板方法設計模式,為什么 Dubbo 可以支持很多種注冊中心?其實本質(zhì)就是用了模板方法設計模式,使得可以擴展多種注冊中心。掌握好模板方法,對讀源碼有非常大的幫助,很多人包括我在內(nèi),在剛開始閱讀源碼的時候,有相當長的一段時間懷疑人生,怎么這些代碼那么繞?調(diào)來調(diào)去的。當你了解了常用的設計模式之后,看源代碼就可以直截了當?shù)闹朗怯檬裁丛O計模式,為什么用這個設計模式?原來是為了什么什么。。。有了這層思考,就像有一條線將以前散落在各地的知識點連接起來,成了可以推敲的知識。

推薦閱讀
單一職責原則(方法:修改名字還是密碼?接口:洗碗、買菜還是倒垃圾?類:注冊、登錄和注銷)
里氏替換原則(我兒來自新東方烹飪)
依賴倒置原則(摳門的飯店老板)
接口隔離原則(小伙子的作坊)
迪米特法則(手機上看電子書)
開閉原則(社保這點事)
創(chuàng)建型模式:單例模式(小明就只有 1 輛車)
創(chuàng)建型模式:工廠方法(小明家的車庫)
創(chuàng)建型模式:抽象工廠(寶馬車就得用寶馬輪胎和寶馬方向盤)
創(chuàng)建型模式:建造者模式(湯這么煲)
創(chuàng)建型模式:原型模式(復印書籍)

公眾號后臺回復『大禮包』獲取 Java、Python、IOS 等教程
加個人微信備注『教程』獲取架構師、機器學習等教程

行為型模式:模板方法

網(wǎng)站標題:行為型模式:模板方法
標題URL:http://www.muchs.cn/article28/gehccp.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供虛擬主機、App開發(fā)、品牌網(wǎng)站制作、建站公司小程序開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

綿陽服務器托管