定義:
ファクトリパターンは、まだ創造的なデザインパターンです。ファクトリは、製品の生産、つまりオブジェクトの作成に関係しています。オブジェクトを自分で作成することなく、ファクトリを使用してオブジェクトを作成します。オブジェクトの作成方法を理解する必要はありません。ファクトリに要求を出し、要件に応じて、必要な製品と対応するオブジェクトをファクトリに生成させるだけでよく、このモデルはファクトリモデルと呼ばれます。
ファクトリモードの利点:
- 疎結合で作成されたオブジェクトはクラス実装から独立しています
- ユーザーは、作成されたオブジェクトのクラスを知る必要はなく、渡されたインターフェース、パラメーター、およびメソッドだけを知っている必要があります。その後、必要なオブジェクトを作成できます。
- 拡張しやすい。ファクトリーは他のタイプのデータ型を追加し、パラメーターを変更するだけで済みます。
実現:
"1"シンプルファクトリモード:
abc import からABCMeta、abstractmethod #ABCMetaはPythonのメタクラスであり、Pythonプログラムで抽象基本クラス、抽象基本クラスで宣言された抽象メソッドを作成するために使用され、abstractmethodデコレーターで装飾されています。 class Coke(metaclass = ABCMeta): @abstractmethod def drink(self): pass class Coca(Coke): def drink(self): print(' drink Coca-Cola ' ) class Pepsi(Coke): def drink(self): print(' drink Pepsi-Cola ' ) class Fast_food_restaurant(): defmake_coke(self、name): return eval(name)() KCD = Fast_food_restaurant() coke = KCD.make_coke(' Coca ' ) coke.drink() #drink Coca-Cola eval(class name)はクラス型を返します私たちの目的は 、Cokeの抽象クラスを作成することです。PepsiとCoca-Colaは、この抽象クラスを継承します。また、ファクトリークラスとも呼ばれるファーストフードレストランクラスを確立して、Cokeを生成します。ユーザーがコーラを必要とするときは、ファーストフードレストランにどのブランドのコークスを作るかを伝え、ファーストフードレストランのコーラ名を伝え、次にファーストフードレストランはmake_cokeメソッドを使用してコーラを作成し、必要なオブジェクト(コカ・コーラのカップ)を返します。幸せなコーラを飲みます。。
「2」ファクトリーメソッドモード
from abc import ABCMeta、abstractmethod class Coke(metaclass = ABCMeta): @abstractmethod def drink(self): pass class Coca(Coke): def drink(self): print(' drink Coca-Cola ' ) class Pepsi(Coke): def drink(self): print(' drink Pepsi-Cola ' ) class Sfencs(Coke): def drink(self): print(' drink Sfencs-Cola ') クラス Fast_food_restaurant(metaclass = ABCMeta): @abstractmethod def make_coke(self): pass class Coca_produce(Fast_food_restaurant): def make_coke(self): return Coca() class Pepsi_produce(Fast_food_restaurant): def make_coke(self): return Pepsi() クラスSfencs_produce(Fast_food_restaurant): def make_coke(self): return Sfencs() KCD = Sfencs_produce() coke = KCD.make_coke() coke.drink()#Sfencs-Cola ファクトリメソッドパターンを飲むと、元のファクトリクラスが抽象クラスに変わり、さまざまなタイプのコーラがさまざまなサブクラスを通じて生成されます。つまり、ファクトリメソッドパターンは、オブジェクトを作成するためのインターフェイスを定義しますが、オブジェクトのどのクラスがサブクラスが決定します。この方法での論理的判断は、クライアントに渡すこと、つまり、使用するサブクラスを選択するためにKCD = Sfencs_produce()と同等であるため、新しいCoke製品が表示された場合、サブクラスの継承を記述するだけで済みます。ファクトリ抽象クラス。
「3」抽象ファクトリパターン
抽象ファクトリパターンの主な目的は、特定のクラスを指定せずに一連の関連オブジェクトを作成するためのインターフェースを提供することです。このパターンとファクトリメソッドパターンの違いは、メソッドサブクラスが一連のオブジェクトを作成できることです。 from abc import ABCMeta、abstractmethod class Ice_coke(metaclass = ABCMeta): @abstractmethod def drink(self): pass class Ordinary_coke(metaclass = ABCMeta): @abstractmethod def drink(self): pass class Coca_ice(Ice_coke): def drink(self ): print(' drink Coca-ice-Cola ' ) クラスPepsi_ice(Ice_coke): def drink(self): print(' drink Pepsi-ice-Cola ' ) class Coca_ordinary(Ordinary_coke): def drink(self): print(' drink Coca-ordinary-Cola ' ) class Pepsi_ordinary(Ordinary_coke): def drink(self): print(' drink Pepsi-ordinary-Cola ' ) クラス Fast_food_restaurant(metaclass = ABCMeta): @abstractmethod def make_ice_coke(self): pass @abstractmethod def make_ordinary_coke(self): 渡す クラスCoca_produce(Fast_food_restaurant): DEF make_ice_coke(自己): 戻りCoca_ice() DEF make_ordinary_coke(自己): 戻りCoca_ordinary() クラスPepsi_produce(Fast_food_restaurant): DEF make_ice_coke(自己): 戻りPepsi_ice() DEF make_ordinary_coke(自己): リターンPepsi_ordinary() KCD = Coca_produce() coke = KCD.make_ice_coke() coke.drink()#ドリンクCoca-ice-Cola