Python設計模式之模板方法模式實例詳解
本文實例講述了Python設計模式之模板方法模式。分享給大家供大家參考,具體如下:
模板方法模式(Template Method Pattern):定義一個操作中的算法骨架,將一些步驟延遲至子類中.模板方法使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。
下面是一個模板方法模式的一個demo:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
__author__ = 'Andy'
"""
大話設計模式
設計模式——模板方法模式
模板方法模式(Template Method Pattern):定義一個操作中的算法骨架,將一些步驟延遲至子類中.模板方法使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟
使用場景:當不變和可變的行為在方法的子類實現(xiàn)中混合在一起時,不變的行為就會在子類中重復出現(xiàn),用模板方法模式把這些不變的行為搬到單一的地方,幫助子類擺脫重復不變的行為糾纏
"""
class NewPaper(object):
def question1(self):
print "題目1"
print self.answer1()
def question2(self):
print "題目2"
print self.answer2()
def answer1(self):
return ''
def answer2(self):
return ''
class TestPaperA(NewPaper):
def answer1(self):
return '答案A1'
def answer2(self):
return '答案A2'
class TestPaperB(NewPaper):
def answer1(self):
return '答案B1'
def answer2(self):
return '答案B2'
if __name__ == '__main__':
test1 = TestPaperA()
test2 = TestPaperB()
print "試卷A"
test1.question1()
test1.question2()
print "試卷B"
test2.question1()
test2.question2()
運行結果:
試卷A
題目1
答案A1
題目2
答案A2
試卷B
題目1
答案B1
題目2
答案B2
上面類的設計如下圖:

NewPaper是抽象類,定義抽象模板并實現(xiàn)了抽象模板方法,TestPaper實現(xiàn)父類的一個或多個抽象方法
當不變和可變的行為在子類的方法中混合在一起時,不變的行為就會在子類中重復出現(xiàn),通過模板方法模式把這些行為搬到單一的地方,幫助子類擺脫重復的不變行為的糾纏
更多關于Python相關內容可查看本站專題:《Python數(shù)據(jù)結構與算法教程》、《Python Socket編程技巧總結》、《Python函數(shù)使用技巧總結》、《Python字符串操作技巧匯總》及《Python入門與進階經(jīng)典教程》
希望本文所述對大家Python程序設計有所幫助。
相關文章
Python for循環(huán)與getitem的關系詳解
這篇文章主要介紹了Python for循環(huán)與getitem的關系詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-01-01
Pytorch損失函數(shù)torch.nn.NLLLoss()的使用
這篇文章主要介紹了Pytorch損失函數(shù)torch.nn.NLLLoss()的使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-02-02
使用Python實現(xiàn)火車票查詢系統(tǒng)(帶界面)
周末、假期來了,七夕也快到了,又到一年中最一票難求的時候了!本文將用Python制作一個簡單的火車票查詢系統(tǒng),感興趣的可以了解一下2022-07-07
Python使用tkinter實現(xiàn)搖骰子小游戲功能的代碼
這篇文章主要介紹了Python使用tkinter實現(xiàn)的搖骰子小游戲功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-07-07
如何實現(xiàn)更換Jupyter Notebook內核Python版本
這篇文章主要介紹了如何實現(xiàn)更換Jupyter Notebook內核Python版本,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-05-05

