模板模式(Template Pattern)是一种行为型设计模式,它定义了一个算法的骨架,并允许子类重写其中的某些步骤,而不改变算法的结构。模板模式通过将共同的代码放在抽象的父类中,避免了代码的重复,提高了代码的复用性。

模板模式包含以下主要角色:

1. 抽象模板类(Abstract Template): 定义了一个算法的骨架,包含了一组抽象方法,这些方法可以是抽象的或者具体的。

2. 具体模板类(Concrete Template): 实现了抽象模板类中的抽象方法,完成了算法的具体步骤。

3. 钩子方法(Hook Method): 在抽象模板类中定义的具体方法,通常是空方法或具有默认实现,子类可以选择性地重写这些方法。

下面是一个简单的模板模式的例子,假设有一个制作饮料的模板,包括烧水、冲泡、倒入杯中等步骤:
# 抽象模板类
class BeverageTemplate:
    def make_beverage(self):
        self.boil_water()
        self.brew()
        self.pour_in_cup()
        self.add_condiments()

    def boil_water(self):
        print("Boiling water")

    def pour_in_cup(self):
        print("Pouring in cup")

    def brew(self):
        pass

    def add_condiments(self):
        pass

# 具体模板类:制作茶
class TeaTemplate(BeverageTemplate):
    def brew(self):
        print("Brewing tea leaves")

    def add_condiments(self):
        print("Adding lemon")

# 具体模板类:制作咖啡
class CoffeeTemplate(BeverageTemplate):
    def brew(self):
        print("Brewing coffee grounds")

    def add_condiments(self):
        print("Adding sugar and milk")

# 客户端代码
if __name__ == "__main__":
    # 制作茶
    print("Making Tea:")
    tea = TeaTemplate()
    tea.make_beverage()

    print("\n")

    # 制作咖啡
    print("Making Coffee:")
    coffee = CoffeeTemplate()
    coffee.make_beverage()

在上述示例中,BeverageTemplate 是抽象模板类,定义了制作饮料的算法骨架,包含了烧水、冲泡、倒入杯中等步骤。TeaTemplate 和 CoffeeTemplate 是具体模板类,分别实现了冲泡和添加调料的具体步骤。

客户端代码可以通过创建不同的具体模板类对象,来制作不同种类的饮料。模板模式允许子类选择性地重写父类的方法,以实现特定的步骤。

模板模式的优点在于它提供了一个通用的算法骨架,同时允许子类在不改变该骨架的情况下重写其中的部分步骤。这样可以确保算法的一致性,同时提供了灵活性和可扩展性。


转载请注明出处:http://www.zyzy.cn/article/detail/11861/设计模式