| 主文章(所有java设计模式的目录) |
|---|
| https://blog.youkuaiyun.com/grd_java/article/details/122252696 |
| 源码位置 |
|---|
| 码云:https://gitee.com/yin_zhipeng/design_mode.git |
| GitHub: |
| 学习设计模式前必须知道的东西 |
|---|
看待设计模式,要站在更大的角度(代码重用性、可读性、可扩展性、可靠性、程序高内聚,低耦合)来综合考虑看待,而不是功能实现的角度看待,不要觉得实现一个功能没必要这么麻烦
文章中给出的设计模式类图都是标准的实现方式,并不一定要完全遵守标准,所以只要设计思想符合,一个设计模式有多种实现方式,尤其是看别人源码的时候,不要用标准类图死扣
| 假设我们盖房子有三步:打桩、砌墙、封顶 |
|---|
- 普通房子、高楼、别墅,各种各样的房子,虽然盖的过程差不多,但是要求都不一样
- 我们要将房子和建造房子的工作分开,解耦,就是建造者模式
产品和产品建造过程解耦,就是建造者模式
1. 建造者模式(Builder Pattern)
| 建造者模式 |
|---|
- 又叫生成器模式,一种对象构建模式。将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象。
- 建造者模式,是一步步创建一个复杂的对象,允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节
就是同一个对象,通过不同建造者建造,让对象百花齐放,例如房子,有楼房,有别墅如果被建造产品差异性很大,则不适合建造者模式,比如房子和汽车
| 建造者模式四个角色 |
|---|
- Product(产品角色):一个具体的产品对象
- Builder(抽象建造者):创建一个Product对象的各个部件指定的接口
- ConcreteBuilder(具体建造者):实现接口,构建和装配各个部件
- 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包下 |
|---|
- Product产品角色,House,需要被建造的对象
- Builder(抽象建造者),HouseBuilder抽象类,规定建造流程,让子类建造,然后我们只负责交工
- 具体建造者,普通房子建造,CommonHouse
- 具体建造者,高楼建造,HighBuilding
- 指挥者,指挥盖房子,需要用户指定盖什么样的房子。HouseDirector
- Client,客户,找到指挥者,指定盖什么房子,然后通知指挥者开始盖,最后拿到House
2. 用到建造者模式的源码
| JDK的StringBuilder用到了建造者模式,java.lang.StringBuilder |
|---|
首先:设计模式的标准,是在JDK之后提出的,设计模式是一种思想,我们前面介绍的建造者模式是后来的一种标准,只要实现了思想,实现方式其实是没有一个固定的标准的- 测试代码和类图:com/yzpnb/design_mode/builder_pattern/source_analysis包下
本文详细介绍了Java设计模式中的建造者模式,包括其概念、角色和应用场景。通过建造房子的例子展示了如何使用建造者模式,同时分析了JDK中StringBuilder的建造者模式实现。文章还提供了类图和源码,帮助读者深入理解建造者模式。














2410

被折叠的 条评论
为什么被折叠?



