Python 设计模式 — 行为型模式 — 模板方法模式

Posted 范桂飓

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 设计模式 — 行为型模式 — 模板方法模式相关的知识,希望对你有一定的参考价值。

目录

文章目录

模板方法模式

模板方法模式,定义一个算法或者流程,部分环节设计为外部可变,用类似于模板的思想来实例化一个实体,可以往模板中填充不同的内容;

在模板思想下,实体的整体框架是确定的,他是一个模板,但是模板下内容可变,从而实现了动态的更新流程或算法。

模板方法模式和建造者模式有些类似。但是建造者模式是将对象的构建和表示分离,相同的构建生成不同的表示对象;而模板方法是将定义的算法或流程中的部分环节推迟到子类中实现算法或流程的可变,这是二者本质的区别。

应用场景

代码示例

实体角色:

  • 抽象类(AbstractClass):定义抽象的原子操作;实现一个模板方法作为算法的骨架。
  • 具体类(ConcreteClass):实现原子操作。
import abc
from time import sleep


# 抽象类
class DriveCar(metaclass=abc.ABCMeta):
    @abc.abstractmethod
    def OpenDoor(self):       # 声明原子操作
        pass

    @abc.abstractmethod
    def PullHandbrake(self):  # 声明原子操作
        pass

    @abc.abstractmethod
    def StartUp(self):        # 声明原子操作
        pass

    @abc.abstractmethod
    def OnTheWay(self):       # 声明原子操作
        pass

    # 模板操作,在抽象类中实现。
    def Drive(self):
        self.OpenDoor()
        self.PullHandbrake()
        self.StartUp()
        while True:
            try:
                self.OnTheWay()
                sleep(1)
            except KeyboardInterrupt:
                break


# 具体类
class XiaoMingDriveCar(DriveCar):
    def __init__(self, music):
        self.music = music

    def OpenDoor(self):            # 实现原子操作
        print("翘着屁股去开车门!")

    def PullHandbrake(self):       # 实现原子操作
        print("翘起兰花指拉下手刹!")

    def StartUp(self):             # 实现原子操作
        print("松开离合,慢慢启动!")

    def OnTheWay(self):            # 实现原子操作
        print(f"开车中...“self.music”")


if __name__ == "__main__":
    music = "喜羊羊,美羊羊,懒羊羊..."
    xiaoming = XiaoMingDriveCar(music)
    xiaoming.Drive()

以上是关于Python 设计模式 — 行为型模式 — 模板方法模式的主要内容,如果未能解决你的问题,请参考以下文章

Python 设计模式 — 行为型模式 — 模板方法模式

设计模式的理解

手撸golang 行为型设计模式 模板方法模式

设计模式之模板方法模式(行为型)

行为型模式:模板方法

设计模式-行为型模式讲解二(模板策略解释器)