デザインパターン-動作-テンプレートメソッドパターン

テンプレートメソッドパターン

概要概要

  • 操作でアルゴリズムスケルトンを定義し、サブクラスの実装までのいくつかのステップを遅らせて、サブクラスがアルゴリズムの構造を変更せずにアルゴリズムの特定のステップを再定義できるようにします。

オブジェクト

  • 抽象クラス:抽象アトミック操作(フック操作)を定義します。アルゴリズムスケルトンとしてテンプレートメソッドを実装します。
  • 特定のクラス:アトミック操作を実現

該当シーン

  • アルゴリズムの不変部分を一度に実装する
  • コードの重複を避けるために、各サブクラスの共通の動作を抽出して、共通の親クラスに集中させる必要があります
  • サブクラス拡張を制御する

"""
设计一个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()

おすすめ

転載: blog.csdn.net/DALAOS/article/details/114222387