Python Tasarım Desenleri - Oluşturucu

Builder Pattern, basit nesneler kullanarak karmaşık nesneler oluşturmaya yardımcı olan ve algoritmik bir yaklaşım kullanan benzersiz bir tasarım modelidir. Bu tasarım deseni, yaratıcı desen kategorisine girer. Bu tasarım modelinde, bir oluşturucu sınıfı, son nesneyi adım adım prosedürle oluşturur. Bu kurucu diğer nesnelerden bağımsızdır.

Builder Modelinin Avantajları

  • Sınıf tarafından oluşturulan belirli bir nesnenin yapımı ve temsili arasında net bir ayrım ve benzersiz bir katman sağlar.

  • Oluşturulan desenin yapım süreci üzerinde daha iyi kontrol sağlar.

  • Nesnelerin iç temsilini değiştirmek için mükemmel bir senaryo verir.

Oluşturucu kalıbı nasıl uygulanır?

Bu bölümde, oluşturucu modelinin nasıl uygulanacağını öğreneceğiz.

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()

Çıktı

Yukarıdaki program aşağıdaki çıktıyı üretir -