15.模板方法模式

1.定义

(1)内容

定义一个操作中的算法骨架,将一些步骤延迟到子类中。

模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

(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调用。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值