Reading Time: 1 minutes
Builder Design Pattern in Python
Write a Python program to implement Builder Design Pattern.
# Basic example of Builder Pattern
# Product to be made: Car
# Components: Engine, Tyres, Speedometer
# Product: Complex object to be made.
class Car():
'''Product: Complex object to be made.'''
def __init__(self):
self.engine = None
self.tyres = None
self.speedometer = None
def __str__(self):
return '{} | {} | {}'.format(self.engine, self.tyres, self.speedometer)
# Abstract Builder: provides an interface to create a car object. It is abstract as it is not instantiated, only inherited by the Concrete Builder
# which uses the interface to create a car.
class AbstractBuilder():
'''Abstract Builder: provides an interface to create a car object.'''
def __init__(self):
self.car = None
def createNewCar(self):
self.car = Car()
# Concrete Builder: inherits the Abstract Builder and implements the above interface createNewCar of the Abstract Builder class for a car object i.e. to say that
# its object is capable of creating a car by calling createNewCar() of AbstractBuilder; provides methods to create components of the product.
class ConcreteBuilder(AbstractBuilder):
'''Concrete Builder: inherits the Abstract Builder and implements the above interface createNewCar of the Abstract Builder class for a car object i.e. to say that
its object is capable of creating a car by calling createNewCar() of AbstractBuilder; provides methods to create components of the product.'''
def addEngine(self):
self.car.engine = "4-stroke"
def addTyres(self):
self.car.tyres = "MRF"
def addSpeedometer(self):
self.car.speedometer = "0-160"
# Director: in charge of building the product using an object of Concrete Builder
class Director():
'''Director: in charge of building the product using an object of Concrete Builder'''
def __init__(self, builder):
self._builder = builder
def constructCar(self):
self._builder.createNewCar()
self._builder.addEngine()
self._builder.addTyres()
self._builder.addSpeedometer()
def getCar(self):
return self._builder.car
concreteBuilder = ConcreteBuilder()
director = Director(concreteBuilder)
director.constructCar()
carOne = director.getCar()
print("Details of carOne:", carOne)
### OUTPUT ###
Details of carOne: 4-stroke | MRF | 0-160







