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