建造者模式(Builder Pattern):它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象。
也许在以下情况使用到它:
- 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时;
- 当构造过程必须允许被构造的对象有不同的表示时。
参与者:
AbstractBuilder
为创建一个Product对象的各个部件指定抽象接口。class AbstractFormBuilder(object): """ 使用abc库中的方法构建抽象类为Python中一种构建抽象类的方法(会有性能上的损耗) """ __metaclass__ = abc.ABCMeta @abc.abstractmethod def add_a(self): pass @abc.abstractmethod def add_b(self): pass
Builder
实现AbstractBuilder的接口以构造和装配该产品的各个部件。定义并明确它所创建的表示。提供一个检索产品的接口""" 分别创建了两个不同的具体建造者类 """ class BuilderA(AbstractFormBuilder): def __init__(self): self.product = [] def add_a(self): self.product.append('a_a') def add_b(self): self.product.append('a_b') def __str__(self): result = '' for i in self.product: result += '产品:' + i + ' ' return result class BuilderB(AbstractFormBuilder): def __init__(self): self.product = [] def add_a(self): self.product.append('b_a') def add_b(self): self.product.append('b_b') def __str__(self): result = '' for i in self.product: result += '产品:' + i + ' ' return result
director
构建Builderdef direcotr(builder): builder.add_a() builder.add_b()
接下来就是客户端代码了:
def main():
builder_a = BuilderA()
builder_b = BuilderB()
direcotr(builder_a)
print builder_a
direcotr(builder_b)
print builder_b
在构建具体项目的时候只需要适当改变就可以了