内容:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
角色:
抽象建造者:(Builder)
具体建造者:(concrete Builder)
组装者:(Director)
产品:(product)
皇三接到了外出打仗,但是募兵了一年,也才募到10个,武器让工厂去落实了,没有人去打仗怎么行。既然没有人就造机器人(player)去打仗,机器需要什么呢?头,身体,手,脚。
一、建造一个生产模型
#产品模型
class Player:
def __init__(self,head=None,body=None,hand=None,leg=None):
self.head=head
self.body=body
self.hand=hand
self.leg=leg
def __str__(self):
return f'批量生产{self.head}, {self.body}, {self.hand}, {self.leg}的机器人'
二、定义一个生产工艺
#抽象建造者
class PlayerBuilder(Player):
@abstractmethod
def build_head(self):
pass
@abstractmethod
def build_body(self):
pass
@abstractmethod
def build_hand(self):
pass
@abstractmethod
def build_leg(self):
pass
三、具体建造的类型
皇三想,要想打胜战,有勇无谋可不行,除了有强壮的士兵机器人,还要有美人计才行,软硬兼施,送个温柔乡给对方。属于就有了具体需要生产的模型,具体要建造的美女类,跟士兵类。
#美女类
class BeautyBuilder(PlayerBuilder):
def __init__(self):
self.player = Player()
def build_head(self):
self.player.head = '性感的头像'
def build_body(self):
self.player.body = 'S型体型'
def build_hand(self):
self.player.hand = '纤细的小手'
def build_leg(self):
self.player.leg = '大长脚'
class SoldiersBuilder(PlayerBuilder):
def __init__(self):
self.player = Player()
def build_head(self):
self.player.head = '勇猛的头像'
def build_body(self):
self.player.body = '强壮的体型'
def build_hand(self):
self.player.hand = '粗矿的小手'
def build_leg(self):
self.player.leg = '粗壮长脚'
四、工艺秘密,开始组装。保密程度--私密级,产品模式有了,那就要有一个组装方法组装。工艺术的改进都在这里处理。
#组装者
class PlayderDirector():
def build_player(self,builder):
print('第一步组装头')
builder.build_head()
print('第二步组装头')
builder.build_body()
print('第三步组装头')
builder.build_hand()
print('第四步组装头')
builder.build_leg()
return builder.player
皇大跟说了皇三的机器人工厂,也想要建造一个,但是始终也拿不到皇三的组装方法。
五、开始生产
皇三下令,一口气生产美女,士兵。
director = PlayderDirector()
builder = BeautyBuilder()
b=director.build_player(builder)
builder1 = SoldiersBuilder()
s=director.build_player(builder1)
print(s)
第一步组装头
第二步组装头
第三步组装头
第四步组装头
批量生产性感的头像, S型体型, 纤细的小手, 大长脚的机器人
第一步组装头
第二步组装头
第三步组装头
第四步组装头
批量生产勇猛的头像, 强壮的体型, 粗矿的小手, 粗壮长脚的机器人
从此皇三日夜生产机器人,不久后就制造出来一只军队出来。