python设计模式之模板方法
模板模式(Template Method Pattern)是一种行为设计模式,它定义了一个操作中的算法框架,而将一些步骤的实现延迟到子类中。通过这种方式,模板模式可以让子类在不改变算法结构的前提下,重新定义算法中某些特定的步骤。
模板模式的组成
抽象类:定义模板方法以及一些可被子类重写的钩子方法。
具体类:实现抽象类定义的步骤,提供具体的实现。
模板模式的优缺点
优点
重用性:通过提取公共的代码,可以减少重复代码。
控制算法结构:可以精确控制算法的结构,同时允许灵活的细节实现。
缺点
过于依赖继承:模板方法模式严重依赖于继承,可能导致类层次结构的复杂化。
不易维护:如果模板方法变化频繁,可能导致子类的修改变得复杂。
示例代码
下面是一个 Python 中实现模板模式的简单示例,其中包含制作不同类型的饮料(如咖啡和茶)的过程。
from abc import ABC, abstractmethod
class CaffeineBeverage(ABC):
"""抽象类"""
def prepare_recipe(self):
"""模板方法"""
self.boil_water()
self.brew()
self.pour_in_cup()
self.add_condiments()
@abstractmethod
def brew(self):
"""子类中必须实现该方法"""
pass
@abstractmethod
def add_condiments(self):
"""子类中必须实现该方法"""
pass
def boil_water(self):
"""通用方法,煮水"""
print("Boiling water")
def pour_in_cup(self):
"""通用方法,倒入杯中"""
print("Pouring into cup")
class Coffee(CaffeineBeverage):
"""具体类:咖啡"""
def brew(self):
"""实现咖啡的冲泡"""
print("Dripping coffee through filter")
def add_condiments(self):
"""实现咖啡的添加配料"""
print("Adding sugar and milk")
class Tea(CaffeineBeverage):
"""具体类:茶"""
def brew(self):
"""实现茶的冲泡"""
print("Steeping the tea")
def add_condiments(self):
"""实现茶的添加配料"""
print("Adding lemon")
# 客户端代码
if __name__ == "__main__":
print("Making coffee...")
coffee = Coffee()
coffee.prepare_recipe()
print("\nMaking tea...")
tea = Tea()
tea.prepare_recipe()
代码解析
CaffeineBeverage 类:是一个抽象类,定义了 prepare_recipe 方法,这是模板方法,包含了制作饮料的一系列步骤。它调用了一些通用方法,如 boil_water 和 pour_in_cup,以及两个抽象方法 brew 和 add_condiments。
具体类 Coffee 和 Tea:分别实现了 brew 和 add_condiments 方法,这些方法的具体实现由子类提供。Coffee 和 Tea 类重写了这些方法,以具体化其特点。
客户端代码:创建了 Coffee 和 Tea 的实例并调用 prepare_recipe 方法,展示了模板模式的工作方式,首先执行通用步骤,然后再执行各自特有的步骤。

浙公网安备 33010602011771号