ファクトリーモード:「工場」は、クラスは通常の状況下では、植物のオブジェクトは、それに関連する1つのまたは複数の方法は、これらの方法は、異なるタイプのオブジェクトを作成するために使用されている必要があり、他のタイプのオブジェクトを作成するための責任があることを意味し、植物オブジェクト異なる方法のメソッドを呼び出すために、クライアントまたはクライアントの端末に応じて渡された異なるパラメータが異なるオブジェクトを返します。
利点:オブジェクトの作成、オブジェクト・モデルは、以下の利点を有している作成する別を作成するが、工場を使用する必要があります。
- 疎結合、オブジェクトを作成することは、それ自体が独立したに開いているクラスを達成するためのファクトリクラスに基づいています。
- クライアントの場合、クラスはちょうどあなたが必要なオブジェクトを取得することができ、適切なインターフェースを呼び出し、特定の実装を知っている必要はなく、これは実際には、関連するクライアントの実装を簡素化しています。
- オブジェクトが唯一の新しいオブジェクトを追加するなど、工場内である必要が変更するには、クライアントは、コードだけの少量であっても要件を満たすためにコードを変更せずに、変更する必要があります。
- 工場インターフェースを使用して、既存のオブジェクトを再利用することができ、既存のオブジェクトまたは再作成したオブジェクトを呼び出すために別の場所に移動しないでください。
工場出荷時のパターン(3又は変異体)の実施の形態3。
- 簡単工場パターン:ファクトリー・クラスは、インターフェイスを提供し、クライアント渡されたパラメータに基づいて、オブジェクトの対応するインスタンスを作成します。(オブジェクトを作成します)
- Factory Methodパターン:基本クラスを定義する必要があり、異なるサブクラスは、オブジェクトの種類を表します。シンプルな工場に対するパターンは、ファクトリメソッドは、よりカスタマイズました。(オブジェクトを作成します)
- Abstract Factoryパターン:抽象ファクトリー・クラスを定義すると、異なるサブクラス、オブジェクトのグループを表す一連のオブジェクトの異なるセットを作成する必要があります。(オブジェクトのセットを作成します)
例簡単なファクトリパターン:
ABC 輸入ABCMeta、abstractmethod クラスフラワー(メタクラス= ABCMeta): @abstractmethod デフshow_price(自己): パス・ クラス・ローズ(花): デフshow_price(自己): プリント(' 価格をローズ:$ 99 ' ) クラスチューリップ(花): デフshow_price(自己): プリント(' チューリップ価格:$ 66 ' ) クラスFlowerSimpleFactory: DEF get_flower(自己、flower_type): リターンevalの(flower_type)() 場合 __name__ == ' __main__ ' : flower_factory = FlowerSimpleFactory()は バラ = flower_factory.get_flower(' ローズ' ) チューリップ = flower_factory.get_flower(' チューリップ' ) rose.show_price() tulip.show_price()
$ 99:価格ローズ チューリップ価格:$ 66
特徴は:さえ花の多様を印刷するために定義されてもよいが、このような植物の例として、(対応する動作を行うことができる直接FlowerSimpleFactory print_priceの方法を返さずに、オブジェクトの対応するインスタンスを返し、オブジェクトをクライアントに渡されたパラメータをインタフェース価格、最初の後にいくつかの操作は、オブジェクトを返すのではなく、当時)の印刷にオブジェクトによってshow_priceメソッドを呼び出し、それは、クライアントが直接オブジェクトを完了、あるいはオブジェクトを作成するためのインターフェイスを作成し、論理オブジェクトを作成するために露出していません。
Factory Methodパターンの例:
ABC 輸入ABCMeta、abstractmethod クラスフラワー(メタクラス= ABCMeta): @abstractmethod デフshow_price(自己): パス・ クラス・ローズ(花): デフshow_price(自己): プリント(' 価格をローズ:$ 99 ' ) クラスチューリップ(花): デフshow_price(自己): プリント(' チューリップ価格:$ 66 ' ) クラスリリー(花): デフshow_price(自己): 印刷("リリーの価格:$ 33 " ) クラス FlowerShopFactory(メタクラス= ABCMeta): デフ __init__ (自己): self.flowers = [] self.stock_flowersは() @abstractmethod DEF :stock_flowers(自己) 渡す デフget_flowers(自己): 戻りself.flowersを デフadd_flower(自己、花): self.flowers.append(花) クラスFlowerShop1(FlowerShopFactory): デフstock_flowers(自己): self.add_flower(ローズ()) self.add_flower(チューリップ()) クラスFlowerShop2(FlowerShopFactory): デフstock_flowers(自己): self.add_flower(ローズ()) self.add_flower(チューリップ()) self.add_flower(リリー()) の場合 __name__ == ' __main__ ' : flower_shop1 = FlowerShop1() のための花中)(flower_shop1.get_flowers: flower.show_price() flower_shop2 = FlowerShop2() のための花でflower_shop2.get_flowers(): flower.show_price()
$ 99:価格ローズ チューリップ価格:$ 66 ローズ価格:$ 59 チューリップの価格:$ 66 リリーの価格:$ 33
特徴:ファクトリメソッドは、基本クラスの別のサブクラスに従って定義することができ、例えばFlowerShop1 FlowerShop2として、各サブクラスを作成することができる「製品」、「工場」を表します。そのオブジェクトは継承が行われ、サブクラスによって作成されます。
Abstract Factoryパターンの例:
ABC インポートABCMeta、abstractmethod クラスミニカー(メタクラス= ABCMeta): @abstractmethod DEF show_size(自己): パス・ クラス SedanCar(メタクラス= ABCMeta): @abstractmethod DEF show_price(自己): 渡す #国产车の クラスDomesticMiniCar(ミニカー)を: DEF show_size(自己): プリント(' 国産軽自動車サイズ:111 ' ) クラスDomesticSedanCar(SedanCar): デフshow_price(自己): 印刷(' 国産セダン車の価格:10W ' ) #英国车 クラスEnglishMiniCar(ミニカー): デフshow_size(自己): プリント(' 英語ミニ車のサイズ:222 ' ) クラスEnglishSedanCar(SedanCar): デフshow_price(自己): プリント(' 英語のセダン車の価格:30ワット' ) #抽象工厂类の クラス CarFactory(メタクラス= ABCMeta): @abstractmethod デフcreate_mini_car(自己): 渡す @abstractmethod デフcreate_sedan_car(自己): 渡す #国产车工厂类 クラスDomesticCarFactory(CarFactory): デフcreate_mini_car(自己): 返すDomesticMiniCarを() DEF create_sedan_car(自己): 戻りますDomesticSedanCar() #英国车 クラスEnglishCarFactory(CarFactory): デフcreate_mini_carを(自己): 返すEnglishMiniCar() デフcreate_sedan_car(自己): 返す(EnglishSedanCarを)
:特長例えば、それぞれ、そのオブジェクトがによって作成されたオブジェクト(英国製自動車や車両)の2つのシリーズを作成した2つのサブクラスの例として、関連する一連のオブジェクトを作成する(抽象ファクトリクラスの例のように)インタフェースを定義する必要があり、サブクラスが完了します。