Patrones de diseño de Python: constructor
Builder Pattern es un patrón de diseño único que ayuda a construir objetos complejos utilizando objetos simples y utiliza un enfoque algorítmico. Este patrón de diseño pertenece a la categoría de patrón de creación. En este patrón de diseño, una clase de constructor crea el objeto final en un procedimiento paso a paso. Este constructor es independiente de otros objetos.
Ventajas de Builder Pattern
Proporciona una separación clara y una capa única entre la construcción y la representación de un objeto específico creado por clase.
Proporciona un mejor control sobre el proceso de construcción del patrón creado.
Ofrece el escenario perfecto para cambiar la representación interna de los objetos.
¿Cómo implementar el patrón de constructor?
En esta sección, aprenderemos cómo implementar el patrón de construcción.
class Director:
__builder = None
def setBuilder(self, builder):
self.__builder = builder
def getCar(self):
car = Car()
# First goes the body
body = self.__builder.getBody()
car.setBody(body)
# Then engine
engine = self.__builder.getEngine()
car.setEngine(engine)
# And four wheels
i = 0
while i < 4:
wheel = self.__builder.getWheel()
car.attachWheel(wheel)
i += 1
return car
# The whole product
class Car:
def __init__(self):
self.__wheels = list()
self.__engine = None
self.__body = None
def setBody(self, body):
self.__body = body
def attachWheel(self, wheel):
self.__wheels.append(wheel)
def setEngine(self, engine):
self.__engine = engine
def specification(self):
print "body: %s" % self.__body.shape
print "engine horsepower: %d" % self.__engine.horsepower
print "tire size: %d\'" % self.__wheels[0].size
class Builder:
def getWheel(self): pass
def getEngine(self): pass
def getBody(self): pass
class JeepBuilder(Builder):
def getWheel(self):
wheel = Wheel()
wheel.size = 22
return wheel
def getEngine(self):
engine = Engine()
engine.horsepower = 400
return engine
def getBody(self):
body = Body()
body.shape = "SUV"
return body
# Car parts
class Wheel:
size = None
class Engine:
horsepower = None
class Body:
shape = None
def main():
jeepBuilder = JeepBuilder() # initializing the class
director = Director()
# Build Jeep
print "Jeep"
director.setBuilder(jeepBuilder)
jeep = director.getCar()
jeep.specification()
print ""
if __name__ == "__main__":
main()
Salida
El programa anterior genera la siguiente salida: