先來看下面這個例子,定義乙個銀行卡抽象類,然後讓子類去實現它的抽象方法,抽象類提供乙個公有的方法,就是消費,消費的流程是固定的,就是用了什麼卡,消費了多少錢;不同的是不同的銀行之間。定義乙個抽象類:
/**
*@classname bankcard
*@description :定義乙個抽象類銀行卡;其中減錢 和 使用的方式是抽象的,需要子類定義,
* *定義乙個公有方法 consume();消費的方式都是一樣的,那就是使用了什麼卡,減去了多少錢。
* *
*@date 2023年6月28日下午5:55:19
* */
public
abstract
class
bankcard
}
定義子類:
//定義 工商銀行的實現類
public
class
icbcbankcard
extends
bankcard
@override
public
void
type()
}
定義另乙個子類:
//定義中國銀行的實現類
public
class
bocbankcard
extends
bankcard
@override
public
void
type()
}
測試類
public
class
bankcardclient
}
列印結果:
工商 信用卡
減去本次消費七折
中國銀行 儲蓄卡
減去本次消費七五折
總結:
簡單來思考,什麼是模板方法模式,就是提供乙個公有的方法(模板、流程方法),那麼從上面的例子可以看出,首先是定義乙個抽象父類,它提供了可以供子類去實現自定義的方法,同時,也抽取出了子類中共同會存在的**或者方法(或者說是乙個流程性很強的方法!)。
大家思考一下,父類可以呼叫子類的方法麼?
當然可以,但是會通過反射,帶參構造等,這是不提倡的!!!
那麼反過頭來再思考下,模板方法模式,是不是通過這種迂迴的方式達到了這個效果。
模板方法抽象出了公有方法,封裝起來,只需要子類去自定義不同的實現就可以了。當然,這會增加子類的數量,畢竟每個實現都要繼承父類嘛。
模板設計模式 PHP設計模式之模板方法模式
模板方法模式,也是我們經常會在不經意間有會用到的模式之一。這個模式是對繼承的最好詮釋。當子類中有重複的動作時,將他們提取出來,放在父類中進行統一的處理,這就是模板方法模式的最簡單通俗的解釋。就像我們平時做專案,每次的專案流程實都差不多,都有調研 開發 測試 部署上線等流程。而具體到每個專案中,這些流...
設計模式之模板方法設計模式
父類抽象出子類共有的方法,子類實現各自不同的業務。總之就是一種行為有他們共同的方法,只是他們具體的實現不一樣。比如開車這種行為模式,啟動 換擋 踩油門。每種型號品牌的車都有共同的行為,但是不同型號品牌的車的實現方式可能不同,需要每個品牌型號的車自己實現這些功能。這樣的定義上面行為的模式,稱之為模板方...
設計模式之模板方法模式
定義 定義乙個操作中演算法的框架,而將一些步驟延遲到子類中,使得子類可以不改變演算法的結構即可重定義該演算法中的某些特定步驟 型別 行為類模式 事實上,模板方法是程式設計中乙個經常用到的模式。比如,給定乙個整數陣列,把陣列中的數由大到小順序,然後把排序之後的結果列印出來。這個需求大體可以分為兩部分,...