ファクトリメソッドパターン
概要概要
- オブジェクトを作成するためのインターフェースを定義し、サブクラスにインスタンス化する製品クラスを決定させます
キャラクター
- 抽象ファクトリの役割(作成者)
- コンクリート工場の役割(コンクリートクリエーター)
- 抽象製品の役割(製品)
- 具体的な製品の役割
例
from abc import ABCMeta,abstractmethod
class Animal(metaclass=ABCMeta):
@abstractmethod
def walk(self):
pass
class Rabbit(Animal):
def walk(self):
print("兔子行走")
class Duck(Animal):
def walk(self):
print("鸭子行走")
class AnimalFactory(metaclass=ABCMeta):
@abstractmethod
def create_animal(self):
pass
class RabbitFactory(AnimalFactory):
def create_animal(self):
return Rabbit()
class DuckFactory(AnimalFactory):
def create_animal(self):
return Duck()
利点
- 特定の各製品は特定のファクトリクラスに対応しており、ファクトリクラスコードを変更する必要はありません。
- 隠しオブジェクト作成の実装の詳細
不利益
- 特定の製品カテゴリを追加するたびに、対応する特定の工場カテゴリを追加する必要があります