Pythonは設計モードを実現する--07.プロトタイプパターン(Prototype Pattern)


プロトタイプモードは実質的にオブジェクトをコピーし、オブジェクトを作成したり、プロパティをコピーしたりするプロセスを省くことができます.また、パフォーマンスの面から、オブジェクトをコピーすることも、オブジェクトを作成するよりも効率的です.
例えば私は3人にメールを送って、土曜日に私の家に食事に来ます.メールの内容は同じですが、受信者が違うので、プロトタイプモードで実現します.
まず、メール構造体を定義します.
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は浅いコピーと深いコピー方法を同時に提供しており、実際にはこのモードを設計する必要はありません.