首頁 >Java >java教程 >案例詳解java23種設計模式:模版方法模式(附程式碼)

案例詳解java23種設計模式:模版方法模式(附程式碼)

php是最好的语言
php是最好的语言原創
2018-07-30 10:52:491610瀏覽

定義

定義演算法中的操作框架,而將一些步驟延遲到子類別中。使得子類別可以不改變演算法結構即可重定義該演算法的某些特定步驟。

角色

此設計模式的角色分割較為簡單

  • 抽像模版類別

  • 具體模版類別

抽像模版類別又包含了這樣幾個方法:模版方法,具體方法,抽象方法,勾子方法。

  • 模版方法

決定了演算法的實作步驟,該方法中呼叫了具體方法,待實作的抽象方法,勾子方法等。是演算法執行的一個模版。

  • 具體方法

具體方法是演算法中較穩穩定的部分,所以在抽象類別中給出了方法的具體實作。

  • 抽象方法

抽象方法正是定義中所說的延遲到子類別實作的方法。

  • 勾子方法

一般模版方法會給出預設實現,子類別中看情況對這個方法進行覆寫重寫。

UML

實作過程

/**
 * Created by tiantian on 2018/7/28
 */public abstract class AbstractTemplateMethod {

    public void templateMethod() {
        implementedMethod();
        abstractMethod();
        hookMethod();        // ... more than method invoke
    }    public void anotherTemplateMethod() {        // do other things
    }    public abstract void abstractMethod();    public void hookMethod() {}    public void implementedMethod() {
        System.out.println("I have been implemented in TemplateMethod class.");
    }    // ... more than method abstract or implemented.}
/**
 * Created by tiantian on 2018/7/28
 */public class ConcreteTempleteMethod extends AbstractTemplateMethod {
    @Override
    public void abstractMethod() {
        System.out.println("Do something");
    }    @Override
    public void hookMethod() {
        System.out.println("Do something in hookMethod");
    }
}

定義

定義演算法中的操作框架,而將一些步驟延遲到子類別中。使得子類別可以不改變演算法結構即可重定義該演算法的某些特定步驟。

角色

此設計模式的角色分割較為簡單

  • #抽像模版類別

  • 特定模版類別

抽像模版類別又包含了這樣幾個方法:模版方法,具體方法,抽象方法,勾子方法。

  • 模版方法

決定了演算法的實作步驟,該方法中呼叫了具體方法,待實作的抽象方法,勾子方法等。是演算法執行的一個模版。

  • 具體方法

具體方法是演算法中較穩穩定的部分,所以在抽象類別中給出了方法的具體實作。

  • 抽象方法

抽象方法正是定義中所說的延遲到子類別實作的方法。

  • 勾子方法

一般模版方法會給出預設實現,子類別中看情況對這個方法進行覆寫重寫。

UML

實作過程

/**
 * Created by tiantian on 2018/7/28
 */public abstract class AbstractTemplateMethod {

    public void templateMethod() {
        implementedMethod();
        abstractMethod();
        hookMethod();        // ... more than method invoke
    }    public void anotherTemplateMethod() {        // do other things
    }    public abstract void abstractMethod();    public void hookMethod() {}    public void implementedMethod() {
        System.out.println("I have been implemented in TemplateMethod class.");
    }    // ... more than method abstract or implemented.}
/**
 * Created by tiantian on 2018/7/28
 */public class ConcreteTempleteMethod extends AbstractTemplateMethod {
    @Override
    public void abstractMethod() {
        System.out.println("Do something");
    }    @Override
    public void hookMethod() {
        System.out.println("Do something in hookMethod");
    }
}

相關文章:

##Java設計模式-設計模式的六種原則

JAVA設計模式之工廠模式(簡單工廠模式工廠方法模式)

相關影片:

設計模式

以上是案例詳解java23種設計模式:模版方法模式(附程式碼)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn