24、设计模式Python版-模板模式

基本介绍

在模板模式(Template Pattern)中,一个抽象类公开定义了执行它方法的模板。

它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。

特点:在有一些通用方法都需要使用时,可将其定义为模板

该模式属于行为型模式。

案例图示

如图所示,为同一个模板传入不同的参数会得到不同的结果:

 

优缺点

优点:

  • 封装不变部分,扩展可变部分
  • 提取公共代码,便于维护
  • 行为由父类控制,子类实现

缺点:

  • 每一个不同的实现都需要一个子类来实现,导致类的个数增加,使得系统更加庞大

代码实现

用Python实现模板模式,实现一个客户点单后的处理流程流程:

class User:

    def __init__(self, name, shop, times, number):
        self.name = name
        self.shop = shop
        self.times = times
        self.number = number
class Handle:

    def __init__(self, user=None):
        self.user = user

    def Invoicen(self):
        """打印小票"""
        string = "打印小票\n" \
                 "客户:{} " \
                 "商品:{} " \
                 "数量:{} " \
                 "时间:{} ".format(self.user.name, self.user.shop,
                                self.user.number, self.user.times)
        print(string)

    def Make(self):
        """开始制作"""
        print("制作完成:{} 数量:{}".format(self.user.shop, self.user.number))

    def run(self):
        self.Invoicen()
        self.Make()
if __name__ == '__main__':
    test = Handle()
    xiaoming = User("小明", "汉堡", "17:50", "5")
    test.user = xiaoming
    test.run()

# 打印小票
# 客户:小明 商品:汉堡 数量:5 时间:17:50 
# 制作完成:汉堡 数量:5