Design 模板模式
基本介绍
在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。
它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。
这种类型的设计模式属于行为型模式。
特点:在有一些通用方法都需要使用时,可将其定义为模板
举例:在造房子的时候,地基、走线、水管都一样,只有在建筑的后期才有加壁橱加栅栏等差异
案例图示
如图所示:
优缺点
优点:
- 封装不变部分,扩展可变部分
- 提取公共代码,便于维护
- 行为由父类控制,子类实现
缺点:
- 每一个不同的实现都需要一个子类来实现,导致类的个数增加,使得系统更加庞大
Python实现
用Python实现模板模式,实现一个客户点单后的处理流程流程:
#! /usr/local/bin/python3
# -*- coding:utf-8 -*-
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 = "打印小票" \
"客户:{}" \
"商品:{}" \
"数量:{}" \
"时间:{}".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
Golang实现
用Golang实现模板模式,实现一个客户点单后的处理流程流程:
...