原型模式实质上就是复制对象,省去了创建对象、复制属性的过程,另外从性能方面考虑,复制对象也比创建对象高效。
比如我要给三个人发邮件,约周六来我家吃饭。邮件内容都一样,只是收件人不一样,下面用原型模式实现它。
首先,定义邮件结构体:
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同时提供了浅复制和深复制方法,我们在实践中就不需要设计这种模式了。