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

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

    原文作者:BingLau
    原文地址: https://blog.csdn.net/qingyunianer/article/details/44113787
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞