2023-02-22  阅读(7)
原文作者:键盘林 原文地址: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


Java 面试宝典是大明哥全力打造的 Java 精品面试题,它是一份靠谱、强大、详细、经典的 Java 后端面试宝典。它不仅仅只是一道道面试题,而是一套完整的 Java 知识体系,一套你 Java 知识点的扫盲贴。

它的内容包括:

  • 大厂真题:Java 面试宝典里面的题目都是最近几年的高频的大厂面试真题。
  • 原创内容:Java 面试宝典内容全部都是大明哥原创,内容全面且通俗易懂,回答部分可以直接作为面试回答内容。
  • 持续更新:一次购买,永久有效。大明哥会持续更新 3+ 年,累计更新 1000+,宝典会不断迭代更新,保证最新、最全面。
  • 覆盖全面:本宝典累计更新 1000+,从 Java 入门到 Java 架构的高频面试题,实现 360° 全覆盖。
  • 不止面试:内容包含面试题解析、内容详解、知识扩展,它不仅仅只是一份面试题,更是一套完整的 Java 知识体系。
  • 宝典详情:https://www.yuque.com/chenssy/sike-java/xvlo920axlp7sf4k
  • 宝典总览:https://www.yuque.com/chenssy/sike-java/yogsehzntzgp4ly1
  • 宝典进展:https://www.yuque.com/chenssy/sike-java/en9ned7loo47z5aw

目前 Java 面试宝典累计更新 400+ 道,总字数 42w+。大明哥还在持续更新中,下图是大明哥在 2024-12 月份的更新情况:

想了解详情的小伙伴,扫描下面二维码加大明哥微信【daming091】咨询

同时,大明哥也整理一套目前市面最常见的热点面试题。微信搜[大明哥聊 Java]或扫描下方二维码关注大明哥的原创公众号[大明哥聊 Java] ,回复【面试题】 即可免费领取。

阅读全文