模板方法模式
1、內容 定義一個操作中的演算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以不改變一個演算法的結構即可重定義該演算法的某些特定步驟。
2、角色 抽象類:定義抽象的原子操作(鉤子操作);實現一個模板方法的骨架 具體類:實現原子操作
3、適用場景 一次性實現一個演算法的不變的部分 各個子類中的公共行為應該被提取出來並集中到一個公共父類中以避免程式碼重複 控制子類擴充套件
4、優點 提高程式碼複用性 將相同部分的程式碼放在抽象的父類中 提高了擴充性 將不同的程式碼放入不同的子類中,通過對子類的擴充套件增加新的行為 實現了反向控制 通過一個父類呼叫其子類的操作,通過對子類的擴充套件增加新的行為,實現了反向控制 & 符合“開閉原則”
5、缺點 引入了抽象類,每一個不同的實現都需要一個子類來實現,導致類的個數增加,從而增加了系統實現的複雜度。
6、示例程式碼
from abc import ABCMeta, abstractmethod
class IOHandler(metaclass=ABCMeta):
@abstractmethod
def open(self, name):
pass
@abstractmethod
def deal(self, change):
pass
@abstractmethod
def close(self):
pass
def process(self, name, change):
'''模板,就相當於是一個空盒子,可以往裡面新增自己需要的功能。讓這個函式去執行'''
self.open(name)
self.deal(change)
self.close()
class FileHandler(IOHandler):
def open(self, name):
print('開啟檔案')
def deal(self, change):
print('操作檔案')
def close(self):
print('關閉檔案')
obj = FileHandler()
obj.process('abc.txt','')
複製程式碼