博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
建造者模式
阅读量:6251 次
发布时间:2019-06-22

本文共 1763 字,大约阅读时间需要 5 分钟。

建造者模式

 

意图:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

适用场景:

  当创建复杂对象的算法(Director)应该独立于该对象的组成部分(Builder)以及它们的装配方式时
  当构造过程允许被构造的对象有不同的表示时(不同Builder)。
角色:
  抽象建造者(Builder)
  具体建造者(Concrete Builder)
  指挥者(Director)
  产品(Product)

  建造者模式与抽象工厂模式相似,也用来创建复杂对象。主要区别是建造者模式着重一步步构造一个复杂对象,而抽象工厂模式着重于多个系列的产品对象

优点:

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

 

from 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):        pass# 建造生产的类class 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.player# 用于生产 产品的类class 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)建造者模式
建造者模式

 

转载于:https://www.cnblogs.com/adamans/articles/7570666.html

你可能感兴趣的文章
Apache与Nginx的优缺点比较
查看>>
【第二篇】Volley的使用之加载图片
查看>>
hdu oj1102 Constructing Roads(最小生成树)
查看>>
减少可执行程序size的三个常用软件
查看>>
窥探Swift之别样的枚举类型
查看>>
pyspark简要原则
查看>>
【移动开发】Android中WIFI开发总结(二)
查看>>
idea git merge代码
查看>>
云计算设计模式(二十二)——静态内容托管模式
查看>>
[Angularjs]ng-file-upload上传文件
查看>>
修改类不用重启Tomcat加载整个项目
查看>>
iframe刷新父页面
查看>>
KL46 custom board SWD reset is never asserted - SWS Waveform
查看>>
如何提高团队管理能力1
查看>>
Redmine中使用SVN进行版本管理经验总结
查看>>
【OC语法要闻速览】一、方法调用
查看>>
Oracle 重建索引脚本
查看>>
先锋军Android注射技术《三》
查看>>
使用光标
查看>>
find命令之exec
查看>>