Python 디자인 패턴-빌더

Builder Pattern은 단순한 객체를 사용하여 복잡한 객체를 구축하고 알고리즘 방식을 사용하는 고유 한 디자인 패턴입니다. 이 디자인 패턴은 창조 패턴의 범주에 속합니다. 이 디자인 패턴에서 빌더 클래스는 단계별 절차에서 최종 객체를 빌드합니다. 이 빌더는 다른 개체와 독립적입니다.

빌더 패턴의 장점

  • 클래스에 의해 생성 된 지정된 객체의 구성과 표현 사이에 명확한 분리와 고유 한 레이어를 제공합니다.

  • 생성 된 패턴의 구성 프로세스를 더 잘 제어 할 수 있습니다.

  • 개체의 내부 표현을 변경하는 완벽한 시나리오를 제공합니다.

빌더 패턴을 구현하는 방법은 무엇입니까?

이 섹션에서는 빌더 패턴을 구현하는 방법을 배웁니다.

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

산출

위의 프로그램은 다음과 같은 출력을 생성합니다-