Python设计模式之模板方法模式实例详解
生活随笔
收集整理的這篇文章主要介紹了
Python设计模式之模板方法模式实例详解
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、模板方法模式定義
定義一個操作中的算法的框架,而將一些步驟延遲到子類中,使得子類可以不改變一個算法的結構即可重新定義該算法的某些特定的步驟。
子類實現的具體方法叫作基本方法,實現對基本方法高度的框架方法,叫作模板方法。
2、模板方法模式的優點
可變的部分可以充分擴展,不變的步驟可以充分封裝;
提取公共代碼,減少冗余代碼,便于維護;
具體過程可以定制,總體流程方便掌控;
使用模板方法可以將代碼的復用最大化;
子類只需要實現自己的方法,將算法和實現的耦合降低。
3、模板方法模式的使用場景
子類中有公有的方法,并且邏輯基本相同,可以使用模板模式。
4、模板方法模式的缺點
在抽象類中定義了子類的方法,即子類對父類產生了影響,部分影響了代碼的可讀性。
5、舉例說明
未使用模板模式:
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()結果:
試卷1 題目 答案A +++++++++++++++++++++++ 試卷2 題目 答案B使用模板模式,提取公共函數:
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()結果:
試卷1 題目 答案A +++++++++++++++++++++++ 試卷2 題目 答案B6、模板模式結構說明
NewPaper是抽象類,定義抽象模板并實現了抽象模板方法,TestPaper實現父類的一個或多個抽象方法。
當不變和可變的行為在子類的方法中混合在一起時,不變的行為就會在子類中重復出現,通過模板方法模式把這些行為搬到單一的地方,幫助子類擺脫重復的不變行為的糾纏。
總結
以上是生活随笔為你收集整理的Python设计模式之模板方法模式实例详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python数据结构常见的八大排序算法(
- 下一篇: python面试题汇总(1)