构建器(Builder)设计模式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/boyun58/article/details/83375015

构建器(Builder)模式是一种独特的设计模式,它有助于使用简单对象构建复杂对象并使用算法,这种设计模式属于创建型模式,在这种设计模式中,构建器类逐步构建最终对象。

该构建器独立于其他对象。
构建器(Builder)模式的优点它提供了清晰的分离和独特的层次,可以在构建和表示由类创建的指定对象之间进行表示。
它可以更好地控制所建模式的实现过程。
它提供了改变对象内部表示的场景。

class Generator(object):
    __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

        color = self.__builder.getColor()
        car.setColor(color)
        return car


# The whole product
class Car:
    def __init__(self):
        self.__wheels = list()
        self.__engine = None
        self.__body = None
        self.__color = None

    def setBody(self, body):
        self.__body = body

    def attachWheel(self, wheel):
        self.__wheels.append(wheel)

    def setEngine(self, engine):
        self.__engine = engine

    def setColor(self, color):
        self.__color = color

    def specification(self):
        print("body: %s" % self.__body.shape)
        print("engine horsepower: %d" % self.__engine.horsepower)
        print("tire size: %d" % self.__wheels[0].size)
        print("car color: %s" % self.__color.color)


class Builder:
    def getWheel(self):
        pass

    def getEngine(self):
        pass

    def getBody(self):
        pass

    def getColor(self):
        pass


class BwmBuilder(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

    def getColor(self):
        color = Color()
        color.color = "黑质金"
        return color


# Car parts
class Wheel:
    size = None


class Engine:
    horsepower = None


class Body:
    shape = None


class Color:
    color = None


def main():
    BWMBuilder = BwmBuilder()  # initializing the class

    generator = Generator()

    # Build Jeep
    print("BWM")
    generator.setBuilder(BWMBuilder)
    BWM = generator.getCar()
    BWM.specification()


if __name__ == "__main__":
    main()

猜你喜欢

转载自blog.csdn.net/boyun58/article/details/83375015