ファクトリメソッドパターンは、オブジェクトの生成をサブクラスに委譲することによって、クラスのインスタンス化を柔軟にするデザインパターンです。このパターンを使用することで、クライアントコードは生成するオブジェクトの具体的なクラスを知らずに済み、コードの保守性と拡張性が向上します。
以下にファクトリメソッドパターンの簡単な実装例を示します。この例では、異なる種類の車を生成するファクトリメソッドを実装します。
class Car:
def drive(self):
raise NotImplementedError("Subclasses must implement this method")
class Sedan(Car):
def drive(self):
return "Driving a sedan!"
class SUV(Car):
def drive(self):
return "Driving an SUV!"
class CarFactory:
def create_car(self, car_type):
if car_type == "sedan":
return Sedan()
elif car_type == "suv":
return SUV()
else:
raise ValueError("Unknown car type")
def main():
factory = CarFactory()
car1 = factory.create_car("sedan")
print(car1.drive()) # 出力: Driving a sedan!
car2 = factory.create_car("suv")
print(car2.drive()) # 出力: Driving an SUV!
if __name__ == "__main__":
main()
インターフェース Car
: すべての車の共通のインターフェースを定義します。このクラスは drive
メソッドを持ち、サブクラスで実装されることが期待されます。
具体的なクラス Sedan
と SUV
: Car
クラスを継承し、具体的な車の動作を実装します。各クラスは drive
メソッドを具体的に実装し、それぞれの動作を返します。
ファクトリクラス CarFactory
: 車の種類に応じて適切なインスタンスを生成します。create_car
メソッドは、受け取った車の種類に基づいて、適切なクラスのインスタンスを返します。
クライアントコード: CarFactory
を使って車のインスタンスを生成し、それぞれの drive
メソッドを呼び出して動作を確認します。
ファクトリメソッドパターンは、オブジェクト生成の柔軟性を提供し、クライアントコードの依存を減らす強力なデザインパターンです。このパターンを使用することで、コードの保守性や拡張性を向上させることができます。新しい車の種類を追加する場合でも、クライアントコードを変更せずに済むため、開発の効率を高めることができます。