模板方法模式
概述
- 定义操作中的算法骨架,而将一些步骤延迟到子类实现,使得一个子类不改变算法的结构即可重新定义算法的特定步骤
对象
- 抽象类:定义抽象的原子操作(钩子操作);实现一个模板方法作为算法骨架
- 具体类:实现原子操作
适用场景
- 一次性实现算法的不变部分
- 各个子类中的公共行为应该被提取出来并集中到一个公共父类中避免代码重复
- 控制子类扩展
例子
"""
设计一个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()