创建型设计模式 - 建造者模式

  1. 建造者模式封装一个对象的构造过程,并允许按步骤构造;
  2. 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示;
  3. 在以下场景适用:
    i. 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时;
    ii. 当构造过程必须允许被构造的对象有不同的表示时.


def printInfo(info):
    print(info)


class PersonBuilder(object):  # 建造者基类
    def BuildHead(self):
        pass

    def BuildBody(self):
        pass

    def BuildArm(self):
        pass

    def BuildLeg(self):
        pass


class PersonFatBuilder(PersonBuilder):  # 胖子建造者
    type = '胖子'

    def BuildHead(self):
        printInfo("构建%s的头" % self.type)

    def BuildBody(self):
        printInfo("构建%s的身体" % self.type)

    def BuildArm(self):
        printInfo("构建%s的手" % self.type)

    def BuildLeg(self):
        printInfo("构建%s的脚" % self.type)


class PersonThinBuilder(PersonBuilder):  # 瘦子建造者
    type = '瘦子'

    def BuildHead(self):
        printInfo("构建%s的头" % self.type)

    def BuildBody(self):
        printInfo("构建%s的身体" % self.type)

    def BuildArm(self):
        printInfo("构建%s的手" % self.type)

    def BuildLeg(self):
        printInfo("构建%s的脚" % self.type)


class PersonDirector(object):  # 指挥者(指挥建造者创建人的实例)
    pb = None

    def __init__(self, pb):
        self.pb = pb

    def CreatePereson(self):
        self.pb.BuildHead()
        self.pb.BuildBody()
        self.pb.BuildArm()
        self.pb.BuildLeg()


if __name__ == '__main__':
    pb = PersonThinBuilder()  # 指定一个建造者
    pd = PersonDirector(pb)  # 由指挥者指定建造者
    pd.CreatePereson()  # 建造者创建人的实例
    pb = PersonFatBuilder()
    pd = PersonDirector(pb)
    pd.CreatePereson()
  1. 某类产品的构建由很多复杂组件组成:如人的头、身体、手、脚;
  2. 这些组件中的某些细节不同,构建出的产品表象会略有不同:如胖子的手和瘦子的手;
  3. 通过一个指挥者按照产品的创建步骤来指挥建造者一步步执行产品的创建;
  4. 当需要创建不同的产品时,只需要派生一个具体的建造者,重写相应的组件构建方法即可:可以创建胖子和瘦子,但都是通过指挥者指导其创建过程,所以指挥者不需要修改。

你可能感兴趣的:(创建型设计模式 - 建造者模式)