15.テンプレート方法モード
1491 ワード
1.定義
(1)内容
動作中のアルゴリズムの骨格を定義し、いくつかのステップをサブクラスに遅延させる.
テンプレート方法は、サブクラスがアルゴリズムの構造を変えずに、アルゴリズムの特定のステップを再定義することができるようにする.
(2)テンプレートの使い方には、2つのキャラクターが必要です.
抽象類:抽象類の役割は抽象類(フック操作)を定義し、アルゴリズムの骨格としてテンプレート方法を実現することです.
具体的な種類:具体的な種類の作用は原子の操作を実現します.
2.実現
抽象的なクラスでは、抽象的な方法インターフェース、およびテンプレートの方法が定義されています.
抽象的な方法のインターフェースはフック方法とも言われています.具体的なクラスで実現されるテンプレートです.
具体的なクラスは抽象クラスのテンプレートの方法を実現しなくてもいいです.
抽象的な方法のテンプレートの方法は、高層コードclientによって呼び出されます.
(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によって呼び出されます.