建造者模式
-
内容
将一个复杂的对象的构建和他的表示分离,使得同样构建过程可以创建不同的表示
-
角色
- 抽象建造者
- 具体建造者
- 指挥者
- 产品
-
优点
- 隐藏了一个产品的内部结构和装配过程
- 将构造代码和表示代码分开
- 对构造代码进行更细致的控制
-
区别:
和抽象工厂相似,也用来创建复杂对象。主要区别是:建造者模式主要是一步步构造一个复杂的对象,而抽象工程是着重于多个系类的产品对象
-
实例代码
from abc import ABCMeta,abstractclassmethod # 建造者模式 class Player(metaclass=ABCMeta): def __init__(self,face=None,body=None,leg=None,arg=None): self.face = face self.leg = leg, self.arg = arg self.body = body def __str__(self): return "{}-{}-{}-{}".format(self.face,self.leg,self.arg,self.body) # Player里面有几个属性,这里就应该有几个建造方法 class PlayBulider(metaclass=ABCMeta): @abstractclassmethod def make_face(self): pass @abstractclassmethod def make_leg(self): pass @abstractclassmethod def make_body(self): pass @abstractclassmethod def make_arg(self): pass # 创建实例 class GirlPlayBulider(PlayBulider): """docstring for GirlPlayBulider·""" def __init__(self): self.play = Player() def make_face(self): self.play.face = '使用GirlPlayBulider创建的脸' def make_leg(self): self.play.leg = '使用GirlPlayBulider创建的leg' def make_body(self): self.play.body = '使用GirlPlayBulider创建的body' def make_arg(self): self.play.arg = '使用GirlPlayBulider创建的arg' # 控制建造顺序 class PlayDirector(object): """docstring for ClassName""" def make_instance(self,bulid): bulid.make_body() bulid.make_face() bulid.make_arg() bulid.make_leg() girl = GirlPlayBulider() director = PlayDirector() director.make_instance(girl) print(girl.play)