2023-02-22
原文作者:键盘林 原文地址:https://blog.csdn.net/qq_37909508/category_8976362.html

建造者:

定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示,用户只需指定需要建造的类型就可以得到它们,建造过程及细节不需要知道

类型:创建型

适合场景

如果一个对象有非常复杂的内部结构(很多属性)

想把复杂对象的创建和使用分离

优点

封装性好,创建和使用分离

扩展性好、建造类之间独立、一定程度上解耦

缺点

产生多余的Builder对象

产品内部发送变化,建造者都要修改,成本较大

coding:

创建一个课程类

202302222059058491.png

创建抽象的建造者CourseBuilder类

202302222059071932.png

创建一个CourseActualBuilder类继承CourseBuilder抽象类

202302222059089633.png

我们直接new一个Course对象,然后直接在各个方法中设置相关值就可以了。

202302222059103724.png

后面这里我们直接返回course就ok了

202302222059118695.png

创建Coach类

202302222059129696.png

现在我们查看UML类图

202302222059149117.png

创建一个Test类

202302222059165338.png

继续查看UML类图

202302222059181669.png

改进版coding:

创建Course类

2023022220591945910.png

增加构造方法,方便后续使用查看

2023022220592080711.png

在Course类中创建内部类 ,也就是相当于将它对应的建造者作为内部类方便直接创建

2023022220592194112.png

在内部类中添加之前的相应方法

2023022220592319013.png

在course的构造函数中传入courseBuilder类(它的静态内部类),并且赋值

2023022220592571614.png

在course的静态内部类CourseBuilder中添加build()方法

2023022220592813715.png

创建Test

链式编程创建

2023022220592951916.png

2023022220593050317.png

查看当前UML类图

2023022220593135018.png

JDK中查看建造者模式

StringBuilder类

2023022220593268519.png

它的append()方法

2023022220593471520.png

StringBuffer同样也采用了建造者模式,只是多了synchronized关键字

2023022220593736521.png

阅读全文