テンプレートメソッドパターン
概要概要
- 操作でアルゴリズムスケルトンを定義し、サブクラスの実装までのいくつかのステップを遅らせて、サブクラスがアルゴリズムの構造を変更せずにアルゴリズムの特定のステップを再定義できるようにします。
オブジェクト
- 抽象クラス:抽象アトミック操作(フック操作)を定義します。アルゴリズムスケルトンとしてテンプレートメソッドを実装します。
- 特定のクラス:アトミック操作を実現
該当シーン
- アルゴリズムの不変部分を一度に実装する
- コードの重複を避けるために、各サブクラスの共通の動作を抽出して、共通の親クラスに集中させる必要があります
- サブクラス拡張を制御する
例
"""
设计一个windows程序,桌面开始,绘制,结束
"""
from abc import ABCMeta, abstractmethod
import time
class Windows(metaclass=ABCMeta):
@abstractmethod
def start(self):
pass
@abstractmethod
def draw(self):
pass
@abstractmethod
def stop(self):
pass
def run(self):
self.start()
while True:
try:
self.draw()
time.sleep(1)
except KeyboardInterrupt:
break
self.stop()
class MyWin(Windows):
def __init__(self, win_info):
self.win_info = win_info
def start(self):
print("windows start...")
def draw(self):
print(f"draw: {self.win_info}")
def stop(self):
print("win stop...")
win = MyWin("win info")
win.run()