您的位置:首页 > 编程语言 > Python开发

Python设计模式——建造者模式

2015-03-07 09:13 337 查看
建造者模式(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

构建Builder

def 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


在构建具体项目的时候只需要适当改变就可以了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: