java设计模式---- 建造者模式

主文章(所有java设计模式的目录)
https://blog.csdn.net/grd_java/article/details/122252696
源码位置
码云:https://gitee.com/yin_zhipeng/design_mode.git
GitHub:
学习设计模式前必须知道的东西
  1. 看待设计模式,要站在更大的角度(代码重用性、可读性、可扩展性、可靠性、程序高内聚,低耦合)来综合考虑看待,而不是功能实现的角度看待,不要觉得实现一个功能没必要这么麻烦
  1. 文章中给出的设计模式类图都是标准的实现方式,并不一定要完全遵守标准,所以只要设计思想符合,一个设计模式有多种实现方式,尤其是看别人源码的时候,不要用标准类图死扣

假设我们盖房子有三步:打桩、砌墙、封顶
  1. 普通房子、高楼、别墅,各种各样的房子,虽然盖的过程差不多,但是要求都不一样
  2. 我们要将房子和建造房子的工作分开,解耦,就是建造者模式
  3. 产品和产品建造过程解耦,就是建造者模式

1. 建造者模式(Builder Pattern)

建造者模式
  1. 又叫生成器模式,一种对象构建模式。将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象。
  2. 建造者模式,是一步步创建一个复杂的对象,允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节
  3. 就是同一个对象,通过不同建造者建造,让对象百花齐放,例如房子,有楼房,有别墅
  4. 如果被建造产品差异性很大,则不适合建造者模式,比如房子和汽车
建造者模式四个角色
  1. Product(产品角色):一个具体的产品对象
  2. Builder(抽象建造者):创建一个Product对象的各个部件指定的接口
  3. ConcreteBuilder(具体建造者):实现接口,构建和装配各个部件
  4. Director(指挥者):构建一个使用Builder接口的对象。它主要是用于创建一个复杂的对象。两个主要作用,一:隔离客户与对象的生产过程,二:负责控制产品对象的生产过程
类图:com/yzpnb/design_mode/builder_pattern/UML/builderPattern.puml

在这里插入图片描述

1. 使用建造者模式模拟建房子

以造房子举例,类图:com/yzpnb/design_mode/builder_pattern/UML/BuildingHouse.puml

在这里插入图片描述

代码:com/yzpnb/design_mode/builder_pattern/building_house包下
  1. Product产品角色,House,需要被建造的对象
    在这里插入图片描述
  2. Builder(抽象建造者),HouseBuilder抽象类,规定建造流程,让子类建造,然后我们只负责交工
    在这里插入图片描述
  3. 具体建造者,普通房子建造,CommonHouse
    在这里插入图片描述
  4. 具体建造者,高楼建造,HighBuilding
    在这里插入图片描述
  5. 指挥者,指挥盖房子,需要用户指定盖什么样的房子。HouseDirector
    在这里插入图片描述
  6. Client,客户,找到指挥者,指定盖什么房子,然后通知指挥者开始盖,最后拿到House
    在这里插入图片描述

2. 用到建造者模式的源码

JDK的StringBuilder用到了建造者模式,java.lang.StringBuilder
  1. 首先:设计模式的标准,是在JDK之后提出的,设计模式是一种思想,我们前面介绍的建造者模式是后来的一种标准,只要实现了思想,实现方式其实是没有一个固定的标准的
  2. 测试代码和类图:com/yzpnb/design_mode/builder_pattern/source_analysis包下
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

殷丿grd_志鹏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值