ビルダーパターンは、複雑なオブジェクトを構築するためのデザインパターンです。このパターンは、オブジェクトの構築過程を分離することで、同じ構築プロセスを使用して異なる表現のオブジェクトを作成することを可能にします。特に、オブジェクトが多くのオプションや構成要素を持つ場合に役立ちます。
ここでは、Vehicle
という複雑なオブジェクトを構築するためのビルダーパターンを実装します。Vehicle
オブジェクトは、車両のタイプ、色、エンジンの種類を持つと仮定します。
まず、Vehicle
クラスを定義します。このクラスは、構築された車両のプロパティを持ちます。
class Vehicle:
def __init__(self, vehicle_type, color, engine_type):
self.vehicle_type = vehicle_type
self.color = color
self.engine_type = engine_type
def __str__(self):
return f"{self.color} {self.vehicle_type} with {self.engine_type} engine"
Vehicle
クラスには、3つの属性(vehicle_type
, color
, engine_type
)があります。__str__
メソッドをオーバーライドして、オブジェクトの情報をわかりやすく表示するようにしています。次に、VehicleBuilder
クラスを作成します。このクラスは、Vehicle
オブジェクトを構築するためのメソッドを提供します。
class VehicleBuilder:
def __init__(self):
self.vehicle_type = None
self.color = None
self.engine_type = None
def set_vehicle_type(self, vehicle_type):
self.vehicle_type = vehicle_type
return self
def set_color(self, color):
self.color = color
return self
def set_engine_type(self, engine_type):
self.engine_type = engine_type
return self
def build(self):
return Vehicle(self.vehicle_type, self.color, self.engine_type)
VehicleBuilder
クラスは、Vehicle
オブジェクトの各プロパティを設定するためのメソッドを提供しています(set_vehicle_type
, set_color
, set_engine_type
)。self
を返すことで、メソッドチェーンを可能にしています。build
メソッドは、設定されたプロパティをもとに新しいVehicle
オブジェクトを生成します。最後に、VehicleBuilder
を使用して、異なるVehicle
オブジェクトを構築してみましょう。
if __name__ == "__main__":
car = VehicleBuilder() \
.set_vehicle_type("Car") \
.set_color("Red") \
.set_engine_type("V6") \
.build()
truck = VehicleBuilder() \
.set_vehicle_type("Truck") \
.set_color("Blue") \
.set_engine_type("V8") \
.build()
print(car)
print(truck)
VehicleBuilder
インスタンスを作成し、車やトラックのプロパティを設定しています。build
メソッドを呼び出してVehicle
オブジェクトを構築し、結果を出力しています。ビルダーパターンは、複雑なオブジェクトを簡単に構築できる方法を提供します。このパターンを使用することで、コードの可読性や柔軟性が向上し、異なる構成のオブジェクトを簡単に作成できます。今回の例では、Vehicle
クラスを使用して、車両オブジェクトを構築する方法を学びました。ビルダーパターンを他のシナリオでも活用することで、より効率的なプログラミングが可能になります。