ビルダーモード
我々は、複数の部品で構成オブジェクトを作成したいのですが、その組成は段階的に行われる必要があります。様々なパーツが作成された場合のみ、オブジェクトが完了したと見なされます。それはどこビルダーデザインパターンです。
同じ構成のプロセスが異なるパフォーマンスを作成するために使用することができるように、モデルビルダーは、オブジェクトとその性能の分離の複雑なプロセスを構築します。
現実の生活の例:ファーストフード店が使うには、ビルダーモードです。異なる包装およびハンバーガー、ハンバーガー、パッケージ製造プロセスの複数のも存在することは同じです。古典的なハンバーガーとチーズバーガー性能ではなく、構築プロセスの間の差。
司令官のレジ係は、どのような食料品の個々のスタッフが、懸念特定の順序によって建設された、スタッフに指示を伝えるために準備する必要があります。
用途:Builderパターンとファクトリパターンの主な違いは、単一のステップでオブジェクトを作成するためのファクトリパターン、およびBuilderパターンは、複数のステップでオブジェクトを作成し、ほとんど常に指揮官を使用することです。
もう一つの違いは、工場出荷時のモードでは、それはすぐに良いオブジェクトが作成されて返されることであり、Builderパターンでは、必要なクライアントコードが明示的に要求した場合にのみ、司令官は、最終的なオブジェクトを返します。
#あなたはまた、Apple社のMac mini 1.4GHzのように事前に構成されたコンピュータモデルのセットを購入することにした場合、新しいコンピュータを購入したいと仮定し、それは工場モデルを使用することです。 #すべての仕様は、メーカーはあなたが何をすべきかを知って相談する必要はありませんどのような、すでにメーカーが事前に決定され、彼らは通常、単一の命令を受けます。 #のFactoryパターン MINI14 = ' 1.4GHzののMac Mini ' クラスAppleFactory: クラスMacMini14: DEF __init__ (セルフ): self.memory = 4 self.hdd = 500 self.gpu = ' 5000インテルHDグラフィックス' DEF __str__ (セルフ): 情報 =(" モデル:{} " .format(MINI14) " メモリー:{} GB " .format(self.memory)、 " ハードディスク:{} GB " .format(self.hdd)、 " グラフィックカード:{} " .format(self.gpu)) リターン " \ n個" .join(情報) デフbuild_computer(自己、モデル): もしモデル== MINI14: 戻る)(self.MacMini14を 他: プリント(" 私は} {構築する方法を知りません。" .format(モデル)) #__name__ == '__main__'の場合: # = AppleFactory AFAC() # mac_mini = afac.build_computer(MINI14) #の 印刷(mac_mini) #の作成者モード、カスタマイズ可能なコンピュータの購入言及記事、このような使用は、Builderパターンである場合。あなたはメーカーからの理想的なコンピュータのスペックの命令心を提供するように指令されています。 クラスのコンピュータ: DEF __init__ (セルフ、シリアル値): self.serial = serial_numberの self.memory = なし self.hdd = なし self.gpu = なし DEF __str__ (セルフ): 情報 =(" モデル:{} " .format(MINI14 )、 「メモリ:GB {}" .format(self.memory)、 " ハードディスク:{} GB " .format(self.hdd)、 " グラフィックカード:{} " .format(self.gpu)) リターン ' \ nは' .join(詳細) クラスComputerBuilder: デフ __init__ (自己): self.computer =コンピュータ(' AG23385193 ' ) デフconfigure_memory(自己、量): self.computer.memory = 量 デフconfigure_hdd(自己、量): self.computer.hdd = 量 DEF configure_gpu(自己、gpu_model): self.computer.gpu = gpu_model クラスHardwareEngineer: デフ __init__ (自己): self.builder = なし DEF construct_computer(自己、メモリ、HDD、GPU): self.builder = ComputerBuilder() #[ (self.builder.configure_memory(メモリ)、ステップステップ #1 self.builder.configure_hdd(HDD)、 # self.builder.configure_gpu(GPU))] self.builder.configure_memory(メモリ) self.builder.configure_hdd(HDD ) self.builder.configure_gpu(GPU ) @property デフコンピュータ(自己): 戻りself.builder.computer DEF :main()の エンジニア = HardwareEngineer() engineer.construct_computer(HDD = 500、メモリ= 8、GPU = ' のGeForce GTX 650 TI ' ) コンピュータ = engineer.computerの 印刷(コンピュータ) 場合 __name__ == ' __main__ ' : メイン()
概要
以下の例では、工場出荷時のモデルと比較して、Builderパターンは、より良い選択です。 1 。私は、複雑なオブジェクトを作成する(オブジェクトが複数の部分から構成され、異なる手順を実行する複数のオブジェクトを作成し、これらのステップは特定の順序に従う必要がある); 2 。オブジェクトが必要異なる性能を有することができ、そして、デカップリングの性能を持つオブジェクトを構築したい。 3.いくつかの点でオブジェクトを作成したいのですが、再度、後の時点でアクセスします。