python版本的建造者模式

建造者模式应用于:

  • 想要创建一个复杂对象(对象由多个部分构成,且对象的创建要经过多个不同的步骤,这些步骤也许遵从特定的顺序)
  • 要求一个对象能有不同的表现,并希望将对象的构造与表现解耦

与工厂模式的区别在于:

  • 工厂模式以单个步骤创建对象,而建造者以多个步骤创建对象
  • 在工厂模式中,会立即返回一个创建好的对象;而在建造者模式中,仅在需要时,客户端代码才显示地请求指挥者返回最终的对象
# -*- coding:UTF-8 -*-
import abc


class Builder(metaclass=abc.ABCMeta):
    @abc.abstractmethod
    def build_part1(self):
        pass

    @abc.abstractmethod
    def build_part2(self):
        pass

    @abc.abstractmethod
    def get_result(self):
        pass


class Product(object):
    def __init__(self):
        self.parts = []

    def add(self, part):
        self.parts.append(part)

    def show(self):
        print("\n产品 创建 ------")
        for part in self.parts:
            print(part)


class ConcreteBuilder1(Builder):
    def __init__(self):
        self.__product = Product()

    def build_part1(self):
        self.__product.add('part A')

    def build_part2(self):
        self.__product.add('part B')

    def get_result(self):
        return self.__product


class ConcreteBuilder2(Builder):
    def __init__(self):
        self.__product = Product()

    def build_part1(self):
        self.__product.add('part X')

    def build_part2(self):
        self.__product.add('part Y')

    def get_result(self):
        return self.__product


class Director:
    def construct(self, builder):
        builder.build_part1()
        builder.build_part2()


if __name__ == '__main__':
    director = Director()
    b1 = ConcreteBuilder1()
    b2 = ConcreteBuilder2()
    director.construct(b1)
    p1 = b1.get_result()
    p1.show()
    director.construct(b2)
    p2 = b2.get_result()
    p2.show()

 

posted @ 2018-01-25 16:29  gjw  阅读(140)  评论(0)    收藏  举报