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

建造者模式(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

在构建具体项目的时候只需要适当改变就可以了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值