主文章(所有java设计模式的目录) |
---|
https://blog.csdn.net/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包下