場景
王大叔的大伯開了一家店育八,這家店在打印發(fā)票的時(shí)候,有的時(shí)候要打印個(gè)體名赦邻,有的時(shí)候要打印單位名髓棋,有的時(shí)候要時(shí)間。因?yàn)檫@個(gè)功能還在增加,所以王大叔想改進(jìn)一下發(fā)票的打印程序按声,使這些功能能簡單地加上去膳犹。
于是他寫下了下列代碼:
class TaxBill:
def __init__(self, amount):
self.amount = amount
class UserNameTaxBill:
def __init__(self, tax_bill):
self.tax_bill = tax_bill
def print_user_name(self, name):
print(name)
class TimeTaxBill:
def __init__(self, tax_bill):
self.tax_bill = tax_bill
def print_time(self, time):
print(time)
總結(jié)
意圖:動(dòng)態(tài)地給一個(gè)對象添加一些額外的責(zé)任。就增加功能來說签则,Decorator模式比生成子類更加靈活须床。
問題:要使用的對象將執(zhí)行所需的基本功能。但是渐裂,可能需要為這個(gè)對象將添加某些功能豺旬,這些附加功能可能發(fā)生在對象的基本功能之前或者之后。
工作原理:創(chuàng)建始于Decorator對象終于原對象的一個(gè)對象鏈芯义。
解決方案:無需創(chuàng)建子類哈垢,而擴(kuò)展一個(gè)對象的功能。