行为型模式 --- 模板方法模式 --- 内容: 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中 使子类可以不改变一个算法的结构,即可重定义该算法的某些特定步骤 角色: 1. 抽象类 (Abstract Class) 定义抽象的原子操作 (钩子操作) 实现一个模板方法作为算法的骨架 2. 具体类 (Concrete Class) 实现原子操作 适用场景: 1. 一次性实现一个算法的不变的部分 2. 各个子类的公共行为应该被提取出来,并集中到一个公共父类中,避免代码重复 3. 控制子类扩展
from abc import ABCMeta, abstractmethod
from time import sleep
class Window(metaclass=ABCMeta):
"""定义抽象的原子操作 / 钩子操作,需要在子类实现"""
@abstractmethod
def start(self):
pass
@abstractmethod
def repaint(self):
pass
@abstractmethod
def stop(self):
pass
def run(self):
"""模板方法 (运行逻辑不用重写)"""
self.start()
while True:
try:
self.repaint()
sleep(1)
except KeyboardInterrupt:
break
self.stop()
class MyWindow(Window):
def __init__(self, msg):
self.msg = msg
def start(self):
print('窗口开始运行')
def stop(self):
print('窗口结束运行')
def repaint(self):
print(self.msg)
MyWindow('Hello...').run()