设计模式-行为型-模板方法模式

Source

模板方法模式

概述

  • 定义操作中的算法骨架,而将一些步骤延迟到子类实现,使得一个子类不改变算法的结构即可重新定义算法的特定步骤

对象

  • 抽象类:定义抽象的原子操作(钩子操作);实现一个模板方法作为算法骨架
  • 具体类:实现原子操作

适用场景

  • 一次性实现算法的不变部分
  • 各个子类中的公共行为应该被提取出来并集中到一个公共父类中避免代码重复
  • 控制子类扩展

例子

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