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

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

