設計模式 二十三 模板方法模式

2021-09-05 07:51:03 字數 1336 閱讀 1404

template method pattern

模板方法模式(template method pattern):定義乙個操作中演算法的框架,而將一些步驟延遲到子類中。模板方法模式使得子類可以不改變乙個演算法的結構即可重定義該演算法的某些特定步驟。

模板方法模式是一種基於繼承的**復用技術,它是一種類行為型模式。

模板方法模式是結構最簡單的行為型設計模式,在其結構中只存在父類與子類之間的繼承關係。通過使用模板方法模式,可以將一些複雜流程的實現步驟封裝在一系列基本方法中,在抽象父類中提供乙個稱之為模板方法的方法來定義這些基本方法的執行次序,而通過其子類來覆蓋某些步驟,從而使得相同的演算法框架可以有不同的執行結果。模板方法模式提供了乙個模板方法來定義演算法框架,而某些具體步驟的實現可以在其子類中完成。

在模板方法模式中,由於物件導向的多型性,子類物件在執行時將覆蓋父類物件,子類中定義的方法也將覆蓋父類中定義的方法,因此程式在執行時,具體子類的基本方法將覆蓋父類中定義的基本方法,子類的鉤子方法也將覆蓋父類的鉤子方法,從而可以通過在子類中實現的鉤子方法對父類方法的執行進行約束,實現子類對父類行為的反向控制。

模板方法模式結構圖:

鉤子方法一般有兩種:

public

void

templatemethod()

}//鉤子方法,返回boolean值

protected bool isprint()

abstract

class

abstractclass

//基本方法—具體方法

public

void

primitiveoperation1()

//基本方法—抽象方法

public

abstract

void

primitiveoperation2()

;//基本方法—鉤子方法

public virtual void

primitiveoperation3()

}

優點:缺點:需要為每乙個基本方法的不同實現提供乙個子類,如果父類中可變的基本方法太多,將會導致類的個數增加,系統更加龐大,設計也更加抽象,此時,可結合橋接模式來進行設計。

適用場景:

經常用到,很頻繁使用。在開發中需要控制父類的實現,得考慮全面。因為不止父類不止有乙個子類。

略…

設計模式之模板方法模式(二十三)

slf4j public abstract class drink 燒開水 public void firewater public void brewing 新增原料 例如 咖啡,牛奶等 abstract void addmaterials abstract void addother 沖泡蜂蜜綠...

二十三種設計模式之模板方法模式

模板方法模式的主要設計思想是定義乙個演算法框架,允許用子類重寫或者其它方式對演算法框架內的某個步驟的具體實現進行修改。本章內容已沖泡咖啡和茶作為例子講解,咖啡和茶葉作為飲料的一種有共通之處,首先燒水 然後沖泡咖啡或茶葉,最後將沖泡後的咖啡或茶葉水倒進杯子中。我們可以將燒水行為和將飲料倒進杯子行為抽象...

二十三種設計模式之模板設計模式

按照我的理解來說,就是乙個流程中,總體的步驟是固定的,但有些步驟是改變的,例如我們做煎蛋這個過程,有哪些步驟是固定的呢,打蛋,下鍋,上碟都是固定的,但有時候我們想吃鹹的,有時候想吃甜的,所以在說放佐料的步驟是改變的。所有的設計模式都是把變化點和固定點分離開來,所謂的固定和變化是相對的,例如我們有乙個...