Python設計模式 模板方法模式

2021-10-04 13:02:35 字數 2146 閱讀 5495

模板方法模式是乙個比較容易理解的設計模式,用乙個考試的例子來講比較通俗易懂,我們考試的時候大家用的都是同乙份試卷,只是是每個人做的答案有可能不一樣,如果每個人都抄乙份試卷那就要完蛋了,考試時間都放在抄試卷上了,如果老師把試卷寫在黑板上,那麼每個同學就只需要將答案交給老師就好了,從而節約了不少時間。

首先來看《大話設計模式》中用c#寫的例子,首先定義了試卷的題目和選項。

然後學生做的答案,但是學生寫了很多重複的東西,比如base.testquestion1/2/3,等於每次答題都要抄題目,而且還要寫上「答案」關鍵字,那個痛苦作為過來人相信大家都懂,按照我們的過來人的經驗,當然是直接寫個abcd比較省事啦,把更多的時間放在思考上才能充分利用考試時間。

通過改進,用虛方法來實現答案方法,這樣每個學生只需要重寫answer方法就可以了。

改進後學生只需要交填有abcd的答題卡就好了,也就是實現虛方法中的內容就好了。

用python實現就更簡單了,將上面的過程進行精簡得到下面的**,template_method是父類要做的事,相當於老師出題,primitive_operation1/2是子類要實現的事,相當於學生答題。

from abc import abstractmethod, abc

'''建立模板類,將需要子類實現的方法進行抽象'''

class

abstractclass

(abc)

: @abstractmethod

defprimitive_operation1

(self)

:#抽象方法1

pass

@abstractmethod

defprimitive_operation2

(self)

:#抽象方法2

pass

deftemplate_method

(self)

: self.primitive_operation1(

) self.primitive_operation2(

)'''與concreteclassb不同的方法實現'''

class

concreteclassa

(abstractclass)

:def

primitive_operation1

(self)

:#實現抽象方法1

print

('具體類a方法1實現'

)def

primitive_operation2

(self)

:#實現抽象方法2

print

('具體類a方法2實現'

)'''與concreteclassa不同的方法實現'''

class

concreteclassb

(abstractclass)

:def

primitive_operation1

(self)

:#實現抽象方法1

print

('具體類b方法1實現'

)def

primitive_operation2

(self)

:#實現抽象方法2

print

('具體類b方法2實現'

)if __name__ ==

'__main__'

: a = concreteclassa(

) b = concreteclassb(

) a.template_method(

) b.template_method(

)

JavaScript設計模式九(模板方法模式)

定義 模板方法模式是一種只需要使用繼承就可以實現的非常簡單的模式 模板方法模式由兩部分組成,第一部分是抽象父類,另一部分是具體的實現子類。通常抽象父類中封裝了子類的演算法框架,包括實現一些公共的方法以及封裝子類中所有方法的執行順序。子類通過繼承這個類,然後繼承了這個演算法,然後重寫父類的方法 例子是...

模板設計模式 設計模式 模板方法模式

在模板模式 template pattern 中,乙個抽象類公開定義了執行它的方法的方式 模板。它的子類可以按需要重寫方法實現,但呼叫將以抽象類中定義的方式進行。這種型別的設計模式屬於行為型模式。首先需要一定抽象的定義,沒有具體的實現,但是在抽象類的行為中,子類去程序這個抽象類,重寫抽象方法,實現不...

初識設計模式 chapter 08 模板方法模式

直到目前,我們的議題都繞著封裝轉,我們已經封裝了物件建立 方法呼叫 複雜介面 鴨子 披薩。接下來呢?我們將要深入封裝演算法塊,好讓子類可以在任何時候都可以將自己掛接進運算裡。我們甚至會在本章學到乙個受到好萊塢影響而啟發的設計原則。有些人沒有咖啡就活不下去,有些人則離不開茶。兩者的共同成分是什麼,當然...