首页 > 代码库 > 建造者模式

建造者模式

一、内容

将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式与抽象工厂模式相似,也用来创建复杂对象。主要区别是建造者模式着重一步步构造一个复杂对象,而抽象工厂模式着重于多个系列的产品对象。

二、角色

  • 抽象建造者(Builder)
  • 具体建造者(Concrete Builder)
  • 指挥者(Director)
  • 产品(Product)

三、优点

  • 隐藏了一个产品的内部结构和装配过程
  • 将构造代码与表示代码分开
  • 可以对构造过程进行更精细的控制

四、适用场景

  • 当创建复杂对象的算法(Director)应该独立于该对象的组成部分以及它们的装配方式(Builder)时
  • 当构造过程允许被构造的对象有不同的表示时(不同Builder)。

五、实例

技术分享
# coding : utf-8# create by ztypl on 2017/5/25from abc import abstractmethod, ABCMeta#------产品------class Player:    def __init__(self, face=None, body=None, arm=None, leg=None):        self.face = face        self.arm = arm        self.leg = leg        self.body = body    def __str__(self):        return "%s, %s, %s, %s" % (self.face, self.arm, self.body, self.leg)#------建造者------class PlayerBuilder(metaclass=ABCMeta):    @abstractmethod    def build_face(self):        pass    @abstractmethod    def build_arm(self):        pass    @abstractmethod    def build_leg(self):        pass    @abstractmethod    def build_body(self):        pass    @abstractmethod    def get_player(self):        passclass BeautifulWomanBuilder(PlayerBuilder):    def __init__(self):        self.player = Player()    def build_face(self):        self.player.face = "漂亮脸蛋"    def build_arm(self):        self.player.arm="细胳膊"    def build_body(self):        self.player.body="细腰"    def build_leg(self):        self.player.leg="长腿"    def get_player(self):        return self.playerclass PlayerDirector:    def build_player(self, builder):        builder.build_body()        builder.build_arm()        builder.build_leg()        builder.build_face()        return builder.get_player()director = PlayerDirector()builder = BeautifulWomanBuilder()p = director.build_player(builder)print(p)
建造者模式样例

 

六、UML图

技术分享

 

建造者模式