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 -