Python Design Patterns - Builder
Builder Pattern è un modello di progettazione unico che aiuta a costruire oggetti complessi utilizzando oggetti semplici e utilizza un approccio algoritmico. Questo modello di design rientra nella categoria del modello creazionale. In questo modello di progettazione, una classe builder costruisce l'oggetto finale in una procedura dettagliata. Questo builder è indipendente da altri oggetti.
Vantaggi di Builder Pattern
Fornisce una chiara separazione e uno strato univoco tra la costruzione e la rappresentazione di un oggetto specificato creato dalla classe.
Fornisce un migliore controllo sul processo di costruzione del modello creato.
Fornisce lo scenario perfetto per cambiare la rappresentazione interna degli oggetti.
Come implementare il pattern builder?
In questa sezione impareremo come implementare il pattern builder.
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()
Produzione
Il programma di cui sopra genera il seguente output:
                    