将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

相关模式:思路和模板方法模式很像,模板方法是封装算法流程,对某些细节提供接口由子类修改,建造者模式更为高层一点,将所有细节都交由子类实现

建造者模式应该有几个关键要素:相同的流程、不同的表示、相同的建造者。也就是同一个对象在同一建造者组织下,以相同的实例化流程来达到不同的表示效果

这样的好处使得构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

#-*- coding:utf-8 -*-

#需求:画人物画,通过设计者规划画的顺序
#设计模式:面向对象,建造者模式
#定义建造模式父类,建造模式子类继承该父类
#定义建造者类,用于规划建造过程,调用建造类中的方法

class Build:
    def draw_head(self):
        pass

    def draw_body(self):
        pass

    def draw_arm(self):
        pass

    def draw_leg(self):
        pass

class Fat(Build):
    def draw_head(self):
        print('画大头')

    def draw_body(self):
        print('画胖身体')

    def draw_arm(self):
        print('画胖胳膊')

    def draw_leg(self):
        print('画胖腿')


class Thin(Build):
    def draw_head(self):
        print('画小头')

    def draw_body(self):
        print('画瘦身体')

    def draw_arm(self):
        print('画瘦胳膊')

    def draw_leg(self):
        print('画瘦腿')

class Director:
    #定义一个建造者类,接收要操作的实例化对象
    def __init__(self, person):
        self.person = person

    #定义建造方法,将实例化对象要执行的操作进行顺序规划和汇总
    def draw(self):
        self.person.draw_head()
        self.person.draw_body()
        self.person.draw_arm()
        self.person.draw_leg()

fat = Fat()
director = Director(fat)
director.draw()

thin = Thin()
director = Director(thin)
director.draw()

结果:

画大头
画胖身体
画胖胳膊
画胖腿
画小头
画瘦身体
画瘦胳膊
画瘦腿
01-16 04:47