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同時提供了淺複製和深複製方法,我們在實踐中就不需要設計這種模式了。


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