鍍金池/ 教程/ Python/ 構(gòu)建器(Builder)設(shè)計模式
反模式
隊列
適配器設(shè)計模式
享元設(shè)計模式
Python設(shè)計模式
工廠模式
模板設(shè)計模式
構(gòu)建器(Builder)設(shè)計模式
Python設(shè)計模式概要
命令設(shè)計模式
Python設(shè)計模式簡介
觀察者設(shè)計模式
代理設(shè)計模式
異常處理
責任鏈設(shè)計模式
字典實現(xiàn)
抽象工廠設(shè)計模式
Python并發(fā)(多線程)
策略設(shè)計模式
門面(Facade)設(shè)計模式
原型設(shè)計模式
迭代器設(shè)計模式
集合
單例模式
列表數(shù)據(jù)結(jié)構(gòu)
狀態(tài)設(shè)計模式
模型視圖控制器(MVC)模式
裝飾器設(shè)計模式
面向?qū)ο蟾拍畹膶崿F(xiàn)
面向?qū)ο笤O(shè)計模式
字符串和序列化

構(gòu)建器(Builder)設(shè)計模式

構(gòu)建器(Builder)模式是一種獨特的設(shè)計模式,它有助于使用簡單對象構(gòu)建復(fù)雜對象并使用算法。 這種設(shè)計模式屬于創(chuàng)建型模式。 在這種設(shè)計模式中,構(gòu)建器類逐步構(gòu)建最終對象。 該構(gòu)建器獨立于其他對象。

構(gòu)建器(Builder)模式的優(yōu)點

  • 它提供了清晰的分離和獨特的層次,可以在構(gòu)建和表示由類創(chuàng)建的指定對象之間進行表示。
  • 它可以更好地控制所建模式的實現(xiàn)過程。
  • 它提供了改變對象內(nèi)部表示的場景。

如何實現(xiàn)構(gòu)建器模式?

在本節(jié)中,我們將學習如何實現(xiàn)構(gòu)建器模式。參考以下實現(xià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()

執(zhí)行上面程序,得到以下輸出結(jié)果 -