15.テンプレート方法モード


1.定義
(1)内容
動作中のアルゴリズムの骨格を定義し、いくつかのステップをサブクラスに遅延させる.
テンプレート方法は、サブクラスがアルゴリズムの構造を変えずに、アルゴリズムの特定のステップを再定義することができるようにする.
(2)テンプレートの使い方には、2つのキャラクターが必要です.
抽象類:抽象類の役割は抽象類(フック操作)を定義し、アルゴリズムの骨格としてテンプレート方法を実現することです.
具体的な種類:具体的な種類の作用は原子の操作を実現します.
2.実現
from abc import ABCMeta, abstractmethod
from time import sleep

#    
class Window(metaclass=ABCMeta):
    @abstractmethod
    def start(self, param):  #     /    
        pass

    @abstractmethod
    def repaint(self, param):  #     /    
        pass

    @abstractmethod
    def stop(self, param):  #     /    
        pass

    def run(self, param):
        """
            (    ),             
        :return:
        """
        self.start(param)
        while True:
            try:
                self.repaint(param)
                sleep(1)
            except KeyboardInterrupt:
                break
        self.stop(param)

#    
class MyWindow(Window):
    def __init__(self, msg):
        self.msg = msg

    def start(self, param):
        print('      !')

    def stop(self, param):
        print('      !')

    def repaint(self, param):
        print(self.msg)

param = '     '
MyWindow("Hello...").run(param=param)
3.結び目
抽象的なクラスでは、抽象的な方法インターフェース、およびテンプレートの方法が定義されています.
抽象的な方法のインターフェースはフック方法とも言われています.具体的なクラスで実現されるテンプレートです.
具体的なクラスは抽象クラスのテンプレートの方法を実現しなくてもいいです.
抽象的な方法のテンプレートの方法は、高層コードclientによって呼び出されます.