Các mẫu thiết kế Python - Trình tạo

Builder Pattern là một mẫu thiết kế độc đáo giúp xây dựng đối tượng phức tạp bằng cách sử dụng các đối tượng đơn giản và sử dụng phương pháp tiếp cận thuật toán. Mẫu thiết kế này thuộc loại mẫu sáng tạo. Trong mẫu thiết kế này, một lớp người xây dựng xây dựng đối tượng cuối cùng trong thủ tục từng bước. Trình xây dựng này độc lập với các đối tượng khác.

Ưu điểm của Builder Pattern

  • Nó cung cấp sự phân tách rõ ràng và một lớp duy nhất giữa việc xây dựng và biểu diễn của một đối tượng cụ thể được tạo bởi lớp.

  • Nó cung cấp khả năng kiểm soát tốt hơn quá trình xây dựng của mẫu được tạo.

  • Nó đưa ra một kịch bản hoàn hảo để thay đổi biểu diễn bên trong của các đối tượng.

Làm thế nào để triển khai mẫu trình tạo?

Trong phần này, chúng ta sẽ tìm hiểu cách triển khai mẫu trình tạo.

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

Đầu ra

Chương trình trên tạo ra kết quả sau: