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

浙公网安备 33010602011771号