设计模式 —— 建造者模式(Builder)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011815404/article/details/89764562

【概述】

建造者模式令一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示,其本质是:分离整体构建算法和部件构造。

有些情况下,一个对象的一些性质必须按照某个顺序赋值才有意义,在某个性质没有赋值之前,另一个性质则无法赋值,这些情况使得性质本身的建造涉及到复杂的商业逻辑。

简单来说,一个对象会有一些重要的性质,在它们没有恰当的值之前,对象不能作为一个完整的产品使用。

例如:一个电子邮件有发件人地址、收件人地址、主题、内容、附录等部分,而在最起码的收件人地址未被赋值之前,这个电子邮件不能发出。

这时候,对象相当于一个有待建造的产品,而对象的这些性质相当于产品的零件,建造产品的过程就是组合零件的过程,由于组合零件的过程很复杂。因此,这些 " 零件 " 的组合过程往往被 " 外部化 " 到一个称作建造者的对象里,由其负责具体实现,再由一个称为指挥者的对象来指导装配过程,不必负责每步时间,最后返还给客户端的是一个全部零件都建造完毕的产品对象。

【UML】

建造者模式涉及到了四个角色:

  • 指挥者角色:Director,构建一个使用 Builder 接口的对象
  • 建造者角色:Builder,定义创建一个 Product 对象所需的各个部件的操作
  • 具体建造者角色:Concrete Builder,实现 Builder 角色提供的接口,一步一步完成创建产品实例的过程,在建造过程完成后,提供产品的实例
  • 产品角色:Product,产品便是建造中的复杂对象

客户端负责创建指挥者与具体建造者对象,然后客户端把具体建造者对象交给指导者,当客户端需要时,指挥者操纵建造者开始创建产品,当产品创建完成后,建造者把产品返还给客户端。

【优缺点】

优点:

  • 使得产品的内部表象可以独立的变化,令客户端不必知道产品内部组成的细节。
  • 每一个 Builder 都相对独立,而与其它的 Builder 无关
  • 模式所建造的最终产品更易于控制

缺点:

  • 当产品之间差异性很大时,不适合使用建造者模式,因此其使用范围受到一定的限制
  • 当产品内部变化很复杂时,可能会导致需要定义很多具体建造者类来实现这种变化,导致系统变得很庞大

【应用】

建造者模式主要用于创建一些复杂的对象,这些对象内部构建间的建造顺序通常是稳定的,但对象内部的构建通常面临着复杂的变化,因此常在满足以下三种情况时使用:

扫描二维码关注公众号,回复: 6098416 查看本文章
  • 需要生成的产品对象有复杂的内部结构
  • 需要生成的产品对象的属性相互依赖,建造者模式可以强迫生成顺序
  • 在对象创建过程中会使用到系统中的一些其它对象,这些对象在产品对象的创建过程中不易得到。

猜你喜欢

转载自blog.csdn.net/u011815404/article/details/89764562