原型模式實質上就是複製對象,省去了創建對象、複製屬性的過程,另外從性能方面考慮,複製對象也比創建對象高效。
比如我要給三個人發郵件,約週六來我家吃飯。郵件內容都一樣,只是收件人不一樣,下面用原型模式實現它。
首先,定義郵件結構體:
class Mail:
__receiver = '' # 接收方
__subject = '' # 郵件主題
__content = '' # 郵件內容
def __init__(self, receiver):
self.__receiver = receiver
def get_receiver(self):
return self.__receiver
def set_receiver(self, receiver):
self.__receiver = receiver
def get_subject(self):
return self.__subject
def set_subject(self, subject):
self.__subject = subject
def get_content(self):
return self.__content
def set_content(self, content):
self.__content = content
然後定義邀請人(發送郵件的人):from copy import copy
# 邀請人(發送郵件的人)
class Sender:
__receivers = () # 要邀請的人
def __init__(self, receivers):
self.__receivers = receivers
# 發送郵件
def send_mail(self):
__mail = Mail('nobody') # 定義原型
__mail.set_subject('週末聚會')
__mail.set_content('Hi!Guys。 週六來我家吃大蝦')
for receiver in self.__receivers:
mail = copy(__mail) # 使用python提供的複製對象方法
mail.set_receiver(receiver)
print('發送給【' + mail.get_receiver() + '】郵件【' + mail.get_subject() + '】,內容爲:【' + mail.get_content() + '】')
構造場景:if __name__ == '__main__':
sender = Sender(('劉德華', '張學友', '安吉麗娜'))
sender.send_mail()
執行結果:發送給【劉德華】郵件【週末聚會】,內容爲:【Hi!Guys。 週六來我家吃大蝦】
發送給【張學友】郵件【週末聚會】,內容爲:【Hi!Guys。 週六來我家吃大蝦】
發送給【安吉麗娜】郵件【週末聚會】,內容爲:【Hi!Guys。 週六來我家吃大蝦】
複製對象方法已經是python的一部分了,而且python同時提供了淺複製和深複製方法,我們在實踐中就不需要設計這種模式了。