シンプルなファクトリパターン
概要概要
- オブジェクト作成の実装の詳細をクライアントに直接公開しないでください。ただし、ファクトリクラスを使用して、製品クラスのインスタンスの作成を担当してください。
キャラクター
- 工場の役割(作成者)
- 抽象製品の役割(製品)
- コンクリート製品(コンクリート製品)
例
example: 最简单实现,旨在理解一些设计模式概念
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:
def create_animal(self, animal_type):
if animal_type == "rabbit":
return Rabbit()
if animal_type == "duck":
return Duck()
return None
利点
- 隠しオブジェクト作成の実装の詳細
- クライアントはコードを変更する必要はありません
不利益
- 単一責任の原則に違反し、作成ロジックをファクトリクラスに統合する
- 開閉の原則に違反しているため、新製品を追加する際に工場コードを変更する必要があります