前言
构建者模式属于构建型模式;
构建者模式和工厂模式类似,不同的是增加了1个Directot类来控制对象的构建过程;
另外构造着模式着重于控制对象构造的先后顺序,而抽象工厂模式着重于创建多系列的不同产品对象
一、建造者模式
建造者模式和工厂模式相似都是用来创建1个复杂对象;
主要区别是建造者模式着重一步步构造1个复杂对象,而抽象工厂着重于创建多系列的产品对象;
构造着模式: 着重于控制对象构造的先后顺序
抽象工厂模式:着重于创建多系列的产品对象
1.概念
将1个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。
2.角色
抽象建造者(Builder):具体构造者类的约束接口
具体建造者(ConcreteBuilder):具体构造类也称为表示
指挥者(Director):在指挥者类中进行对象的构造
产品(Product):指挥者根据一定顺序构造出各种产品
3.优点
构造者模式的优点,主要集中体现在Director类。
隐藏了1个产品的内部结构和装配过程。
将构造代码于表示代码分离,在Director类中进行构造对象,而不是具体构造者类。
可以对构造过程进行更精细的控制。
4.代码
from abc import ABC, abstractmethod '''' 构造1个游戏角色 1个游戏角色由于4部分组成,分别为 head、body、arm、leg 该角色的组装顺序必须为 head-->body-->arm-->leg ''' # 相当于工厂模式中的产品:role和build类为组合关系 class Role(object): def __init__(self, head=None, body=None, arm=None, leg=None): self.head = head self.body = body self.arm = arm self.leg = leg def __str__(self): return f"{self.head} {self.body} {self.arm} {self.leg}" # 抽象构造者:相当于工厂模式中的抽象工厂 class RoleBuilder(ABC): @abstractmethod def build_head(self): pass @abstractmethod def build_body(self): pass @abstractmethod def build_arm(self): pass @abstractmethod def build_leg(self): pass # 具体构造者-构造出1个具体的美女角色-相当于工厂模式中的具体工厂类 class SexyGirlBuild(RoleBuilder): def __init__(self): self.role = Role() def build_head(self): self.role.head = "漂亮脸蛋" def build_body(self): self.role.body = "苗条身材" def build_arm(self): self.role.arm = "纤纤玉手" def build_leg(self): self.role.leg = "修长美腿" # 具体构造者-构造出1个具体的怪兽角色-相当于工厂模式中的具体工厂类 class MonsterBuild(RoleBuilder): def __init__(self): self.role = Role() def build_head(self): self.role.head = "毛脸" def build_body(self): self.role.body = "蛇身" def build_arm(self): self.role.arm = "鳄鱼爪" def build_leg(self): self.role.leg = "狗腿" # 指挥者-多出1个导演/指挥者,指挥者的作用是严格控制组装顺序 class RoleDirector(object): # 控制组装顺序 def build_role(self, builder): builder.build_head() builder.build_body() builder.build_arm() builder.build_leg() return builder.role # 高层代码-Client # builder=SexyGirlBuild() builder = MonsterBuild() director = RoleDirector() p = director.build_role(builder) print(p)