将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
相关模式:思路和模板方法模式很像,模板方法是封装算法流程,对某些细节提供接口由子类修改,建造者模式更为高层一点,将所有细节都交由子类实现
建造者模式应该有几个关键要素:相同的流程、不同的表示、相同的建造者。也就是同一个对象在同一建造者组织下,以相同的实例化流程来达到不同的表示效果
这样的好处使得构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
#-*- 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()
结果:
画大头
画胖身体
画胖胳膊
画胖腿
画小头
画瘦身体
画瘦胳膊
画瘦腿