【聚能聊話題】聊聊設計模式,封裝算法——模板方法模式

前面咱們聊了:
什麼是設計模式?你知道多少?
你必須知道的六大設計原則
第一個設計模式,我是皇帝我獨苗,單例模式
第二個設計模式,工廠方法模式
第三個設計模式,抽象工廠模式
這個真的很枯燥啊,你們參與的不多,可是你只要按格式認真參與,獲得獎品的機會可能更高哦!
今天咱們來聊聊第四個設計模式,模板方法模式。
image
模板方法模式:定義一個操做中的算法的骨架,而將一些步驟延遲到子類中。使得子類能夠不改變算法的結構便可重定義該算法的某些特定步驟。(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)算法

看了定義恐怕會很頭大,下面是通俗一點的:
在軟件開發過程當中,若是相同的一段代碼複製過兩次,就須要對設計產生懷疑,架構師要明確地說明爲何相同的邏輯要出現兩次或更屢次。
封裝算法,將相同的代碼封裝到一個方法中,這就是模板方法模式。設計模式

public abstract class AbstractClass {
    protected abstract void doAnything();
    protected abstract void doSomething();
    protected boolean isDoSomething(){ //父類方法返回真
        return true;
    }
    public final void templateMethod(){
        /*
         * 調用基本方法,完成相關的邏輯
         */
        this.doAnything();
        if(this.isDoSomething())
            this.doSomething();
    }
}
public class ConcreteClass1 extends AbstractClass {
    private boolean isDoSth;
    @Override
    protected void doAnything() {
        // TODO Auto-generated method stub
        //子類實現具體
    }

    @Override
    protected void doSomething() {
        // TODO Auto-generated method stub    
    }
    protected void setDo(boolean isDo){
        this.isDoSth = isDo;
    }

    @Override
    protected boolean isDoSomething(){
        return isDoSth;
    }
}

public class ConcreteClass2 extends AbstractClass {

    @Override
    protected void doAnything() {
        // TODO Auto-generated method stub
        //子類實現具體
    }

    @Override
    protected void doSomething() {
        // TODO Auto-generated method stub    
    }
}

這個模式是用來建立一個算法的模板。什麼是模板?如你所見的,模板就是一個方法。更具體地說,這個方法將算法定義成一組步驟,其中的任何步驟均可以是抽象的,由子類負責實現。這能夠確保算法的結構保持不變,同時由子類提供部分實現。架構

模板方法模式的優勢
封裝不變部分,擴展可變部分。把認爲不變部分的算法封裝到父類中實現,而可變部分的則能夠經過繼承來繼續擴展。
提取公共部分代碼,便於維護。
行爲由父類控制,子類實現。
模板方法模式的缺點
按照設計習慣,抽象類負責聲明最抽象、最通常的事物屬性和方法,實現類負責完成具體的事務屬性和方法,可是模板方式正好相反,子類執行的結果影響了父類的結果,會增長代碼閱讀的難度。
模板方法模式的使用場景
多個子類有共有的方法,而且邏輯基本相同時。
重要、複雜的算法,能夠把核心算法設計爲模板方法,周邊的相關細節功能則由各個子類實現。
重構時,模板方法是一個常常使用的方法,把相同的代碼抽取到父類中,而後經過構造函數約束其行爲。ide

今天的話題:
一、通常模板方法都會加上一個關鍵字,你知道是什麼嗎?做用目的是什麼?函數

二、模板方法模式能夠擴展,使用鉤子,你能指出示例中對應功能的代碼嗎?this

三、有一個設計模式和模板方法模式很像,你知道它是什麼模式嗎?它們有什麼類似與不一樣?設計

點擊連接去參與話題,認真回覆就可能得到如下獎品哦!code

相關文章
相關標籤/搜索