设计模式之建造者模式/生成器模式

建造者模式/生成器模式

菜鸟教程 - 建造者模式

五分钟设计模式 - 16生成器模式

尚硅谷

1. 介绍

1.1 功能

  1. 将一个复杂的对象的构建与它的表示分离、解耦
  2. 是一种创建型模式。它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象。
  3. 可以使得相同的创建过程可以创建不同的产品对象
  4. 建造者模式是一步创建一个复杂的对象 ,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节 。
  5. 增加新的具体建造者无需修改原有代码

建造者模式所创建的产品一般具有较多共同点。如果其组成部分相似如果产品之间 的差异性很大,则不适合使用建造者模式 ,因此其使用范围受到一定的限制 。


1.2 四个角色

  1. Product(产品角色): 一个具体的产品对象,包含多个部件。
  2. Builder(抽象建造者): 创建一个Product对象的各个部件指定的接口/抽象类
  3. ConcreteBuilder(具体建造者):实现接口,实现具体建造的流程,构建和装配各个部件。
  4. Director(指挥者/导演):构建一个使用Builder接口的对象。它主要是用于创建一个复杂的对象。

在这里插入图片描述


导演的作用,一是隔离了客户与对象的生产过程,二是负责控制产品对象的生产过程。导演类起到封装的作用,避免高层模块深入到建造者内部的实现类。在建造者模式比较庞大时,导演类可以有多个。

在实际开发中,我们的产品创建通常有几个固定流程,通过这几个固定流程可以建造固定型号的几个产品。导演正式把这些型号的具体细节给隐藏了,客户端只需要清楚自己要哪种型号的哪个产品即可,不必知道这个型号的具体细节


1.3 代码搭建

尚硅谷p57


2. 使用场景

  1. 相同的方法,不同的执行顺序,产生不同的事件结果时

  2. 多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不相同时

  3. 产品类非常复杂,或者产品类中的调用顺序不同产生了不同的效能

  4. 在对象创建过程中会使用到系统中的一些其他对象,这些对象在产品对象的创建过程中不易得到时,也可以采用建造者模式封装该对象的创建过程。

    该种场景只能是一个补偿方法,因为一个对象不容易获得,而在设计阶段竟然没有发觉,而要通过创建者模式柔化创建过程,本身已经违反设计的最初目标。


3. 工厂模式和建造者模式

建造者模式关注的是零件类型和装配工艺(顺序),这是它与工厂方法模式最大不同的地方,虽然同为创建类模式,但是注重点不同。

建造者模式最主要的功能是基本方法的调用顺序安排,也就是这些基本方法已经实现了,通俗地说就是零件的装配,顺序不同产生的对象也不同。

而工厂方法则重点是创建,创建零件是它的主要职责,组装顺序则不是它关心的。采用抽象工厂模式不需要关心构建过程,只关心什么产品由什么工厂生产即可。


4. JDK源码分析

StringBuilder继承于AbstractStringBuilder,这个抽象类实现了Appendable接口。

Appendable接口定义了多个append方法(抽象方法),因此Appendable接口可以被视为抽象建造者,定义了抽象方法。

而AbstractStringBuilder虽然是抽象类,但它已经提供了多个方法的具体实现,可以被视为具体建造者(只是不能实例化)

StringBuilder既充当指挥者,又充当建造者(不过其建造方法的实现是由AbstractStringBuilder完成的)


5. 拓展

建造者模式可以联系模板方法模式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值