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

NewPaper是抽象類,定義抽象模板并實現(xiàn)了抽象模板方法,TestPaper實現(xiàn)父類的一個或多個抽象方法
當不變和可變的行為在子類的方法中混合在一起時,不變的行為就會在子類中重復(fù)出現(xiàn),通過模板方法模式把這些行為搬到單一的地方,幫助子類擺脫重復(fù)的不變行為的糾纏
更多關(guān)于Python相關(guān)內(nèi)容可查看本站專題:《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python Socket編程技巧總結(jié)》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》及《Python入門與進階經(jīng)典教程》
希望本文所述對大家Python程序設(shè)計有所幫助。
- Python設(shè)計模式之代理模式實例詳解
- Python設(shè)計模式之原型模式實例詳解
- Python設(shè)計模式之觀察者模式原理與用法詳解
- Python設(shè)計模式之狀態(tài)模式原理與用法詳解
- Python設(shè)計模式之適配器模式原理與用法詳解
- Python設(shè)計模式之組合模式原理與用法實例分析
- Python設(shè)計模式之享元模式原理與用法實例分析
- Python設(shè)計模式之解釋器模式原理與用法實例分析
- Python設(shè)計模式之迭代器模式原理與用法實例分析
- Python設(shè)計模式之橋接模式原理與用法實例分析
- Python設(shè)計模式之裝飾模式實例詳解
相關(guān)文章
Python數(shù)據(jù)處理Pandas庫的使用詳解
這篇文章主要為大家詳細介紹了pandas庫的使用方法,包括數(shù)據(jù)導(dǎo)入與導(dǎo)出、數(shù)據(jù)查看和篩選、數(shù)據(jù)處理和分組操作等,感興趣的小伙伴可以了解一下2023-07-07
對python中arange()和linspace()的區(qū)別說明
這篇文章主要介紹了對python中arange()和linspace()的區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-05-05
pyinstaller打包python3.6和PyQt5中各種錯誤的解決方案匯總
pyinstaller是打包python很方便的一個套件,我們可以很輕易地使用他,下面這篇文章主要給大家介紹了關(guān)于pyinstaller打包python3.6和PyQt5中各種錯誤解決的相關(guān)資料,需要的朋友可以參考下2022-08-08
Python?數(shù)據(jù)可視化實現(xiàn)5種炫酷的動態(tài)圖
數(shù)據(jù)可以幫助我們描述這個世界、闡釋自己的想法和展示自己的成果,但如果只有單調(diào)乏味的文本和數(shù)字,我們卻往往能難抓住觀眾的眼球。而很多時候,一張漂亮的可視化圖表就足以勝過千言萬語2022-01-01
Python中struct模塊對字節(jié)流/二進制流的操作教程
最近在學(xué)習python網(wǎng)絡(luò)編程這一塊,在寫簡單的socket通信代碼時,遇到了struct這個模塊的使用,當時不太清楚這到底有和作用,后來查閱了相關(guān)資料大概了解了,這篇文章就主要介紹了Python中struct模塊對字節(jié)流/二進制流的操作,需要的朋友可以參考借鑒。2017-01-01
給你選擇Python語言實現(xiàn)機器學(xué)習算法的三大理由
這篇文章主要介紹了給你選擇Python語言實現(xiàn)機器學(xué)習算法的三大理由,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-11-11
python openvc 裁剪、剪切圖片 提取圖片的行和列
這篇文章主要介紹了python openvc 裁剪、剪切圖片 提取圖片的行和列,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-09-09

