Python设计模式之模板方法模式实例详解
1、模板方法模式定義
定義一個(gè)操作中的算法的框架,而將一些步驟延遲到子類中,使得子類可以不改變一個(gè)算法的結(jié)構(gòu)即可重新定義該算法的某些特定的步驟。
子類實(shí)現(xiàn)的具體方法叫作基本方法,實(shí)現(xiàn)對(duì)基本方法高度的框架方法,叫作模板方法。
2、模板方法模式的優(yōu)點(diǎn)
可變的部分可以充分?jǐn)U展,不變的步驟可以充分封裝;
提取公共代碼,減少冗余代碼,便于維護(hù);
具體過(guò)程可以定制,總體流程方便掌控;
使用模板方法可以將代碼的復(fù)用最大化;
子類只需要實(shí)現(xiàn)自己的方法,將算法和實(shí)現(xiàn)的耦合降低。
3、模板方法模式的使用場(chǎng)景
子類中有公有的方法,并且邏輯基本相同,可以使用模板模式。
4、模板方法模式的缺點(diǎn)
在抽象類中定義了子類的方法,即子類對(duì)父類產(chǎn)生了影響,部分影響了代碼的可讀性。
5、舉例說(shuō)明
未使用模板模式:
class TestPaperA(object):def question(self):print("題目")def answer(self):print('答案A')class TestPaperB(object):def question(self):print("題目")def answer(self):print('答案B')if __name__ == '__main__':print("試卷1")t1 = TestPaperA()t1.question()t1.answer()print("+++++++++++++++++++++++")print("試卷2")t2 = TestPaperB()t2.question()t2.answer()結(jié)果:
試卷1 題目 答案A +++++++++++++++++++++++ 試卷2 題目 答案B使用模板模式,提取公共函數(shù):
class NewPaper(object):def question(self):print("題目")class TestPaperA(NewPaper):def question(self):print("題目")def answer(self):print('答案A')class TestPaperB(NewPaper):def question(self):print("題目")def answer(self):print('答案B')if __name__ == '__main__':print("試卷1")t1 = TestPaperA()t1.question()t1.answer()print("+++++++++++++++++++++++")print("試卷2")t2 = TestPaperB()t2.question()t2.answer()結(jié)果:
試卷1 題目 答案A +++++++++++++++++++++++ 試卷2 題目 答案B6、模板模式結(jié)構(gòu)說(shuō)明
NewPaper是抽象類,定義抽象模板并實(shí)現(xiàn)了抽象模板方法,TestPaper實(shí)現(xiàn)父類的一個(gè)或多個(gè)抽象方法。
當(dāng)不變和可變的行為在子類的方法中混合在一起時(shí),不變的行為就會(huì)在子類中重復(fù)出現(xiàn),通過(guò)模板方法模式把這些行為搬到單一的地方,幫助子類擺脫重復(fù)的不變行為的糾纏。
總結(jié)
以上是生活随笔為你收集整理的Python设计模式之模板方法模式实例详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Python数据结构常见的八大排序算法(
- 下一篇: python面试题汇总(1)