Python实现设计模式--07.原型模式(Prototype Pattern)

原型模式实质上就是复制对象,省去了创建对象、复制属性的过程,另外从性能方面考虑,复制对象也比创建对象高效。


比如我要给三个人发邮件,约周六来我家吃饭。邮件内容都一样,只是收件人不一样,下面用原型模式实现它。

首先,定义邮件结构体:

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同时提供了浅复制和深复制方法,我们在实践中就不需要设计这种模式了。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章