乐趣区

关于设计模式:设计模式建造者模式

角色


建造者故名思维,就是建房子的人,是来自建筑工程畛域的的概念,其中蕴含三种次要角色:

  • 建造者(Builder):不同品种的工人,如打地基的,建房梁的,室内装修的等;
  • 具体的建造者(ConcreteBuilder):每个工种对应的具体的工人;
  • 指挥者(Director):工程队总指挥,包工头,指挥具体的建造者建房子;
  • 具体产品(Product):最终建成的房子。

定义


建造者模式是将一个简单的对象的构建与它的示意拆散,使得同样的构建过程能够创立不同的示意。创建者模式暗藏了简单对象的创立过程,它把简单对象的创立过程加以形象,通过子类继承或者重载的形式,动静的创立简单的、具备复合属性的对象。

案例


上面将通过一个小案例来解释阐明什么建造者模式。

简化需要

假如须要制作一个手机,手机包含 CPU,内存,屏幕等几个局部,而 CPU,内存,屏幕配置不同又有高端,低端之分。要求手机配置能够灵便搭配。

初始版 UML

该版本间接在在须要的时候通过 new 创立不同规格的 CPU,内存,屏幕等对象。

长处

简略,并且配置可灵便搭配

毛病

  • 面向了实现编程,用户须要晓得太多的创立细节

工厂办法革新

基于上述起因,咱们通过工厂办法革新,屏蔽具体配件的创立细节。

长处

  • 屏蔽了配件的发明细节
  • 配置可灵便搭配

毛病

  • 复杂度急剧增大,类爆炸
  • 把配件的组装交给手机类 (Phone) 解决不合理
  • 没有屏蔽手机发明细节

形象工厂 + 简略工厂革新

为了解决类爆炸的问题,咱们合并配件工厂类,由一个形象工厂创立相干配件,再由简略工厂组装生产手机成品。

简化 UML(规范版本)

因为无论是 CPU、内存还是屏幕都属于手机的一部分,因而整个产品还是手机自身,由此,可简化上述 UML 图,并形象失去下图:

长处

  • 肯定水平上,打消了类爆炸问题
  • 职责拆散,由独自一个生产线组装手机

毛病

  • 配件配置变得固定了,不能随便组合
  • 对大多数场景仍然过于简单,比方,未必每一个配置的手机都须要一个生产线,组装手机也未必须要一个独自的生产线。

进一步简化

很多场景中并没有指挥者,或者说指挥者就是建造者自身,因而,建造者模式可进一步简化为如下构造:

再进一步革新

同样的,大多数状况一个建造者只会有一个实现子类,因而,还可用进一步简化,这样能够应用委托对须要建造的对象进行灵便的配置。

简化 UML(简化版本,最罕用)

长处

简略,灵便,代码优雅

毛病

用户应用老本绝对较高,须要使用者本人配置外部参数。

总结


建造者模式通常用于动静的创立简单的、具备复合属性的对象。在.Net Core 也存在大量的建造者模式的应用,例如,StringBuilderHostBuilderIHostBuilderIWebHostBuilderConfigurationBuilder等,有趣味的能够学习下。

源码链接
视频分享链接
更多内容请关注公众号:

退出移动版