日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java的生成器模式(又名建造者模式),你真的会了吗

發布時間:2023/12/31 java 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java的生成器模式(又名建造者模式),你真的会了吗 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

0 前言

全是干貨的技術殿堂

文章收錄在我的 GitHub 倉庫,歡迎Star/fork:

Java-Interview-Tutorial

https://github.com/Wasabi1234/Java-Interview-Tutorial

1 基本概念

1.0 為什么需要生成器模式?

系統中一些復雜的對象,它們擁有多個組成部分,如汽車,它包括車輪、方向盤、發送機等各種部件。而對于大多數用戶而言,無須知道這些部件的裝配細節,也幾乎不會使用單獨某個部件,而是使用一輛完整的汽車!

這時就可以通過建造者模式對其進行設計與描述,建造者模式可以將部件和其組裝過程分開,一步一步創建一個復雜的對象。
用戶只需要指定復雜對象的類型就可以得到該對象,而無須知道其內部的具體構造細節。

在軟件開發中,也存在大量類似汽車一樣的復雜對象,它們擁有一系列屬性,這些屬性中有些是引用類型的成員對象。而且在這些復雜對象中,還可能存在一些限制條件,如

  • 某些屬性沒有賦值則復雜對象不能作為一個完整的產品使用
  • 有些屬性的賦值必須按照某個順序,一個屬性沒有賦值之前,另一個屬性可能無法賦值

復雜對象相當于一輛有待建造的汽車,而對象的屬性相當于汽車的部件,建造產品的過程就相當于組合部件的過程。由于組合部件的過程很復雜,因此,這些部件的組合過程往往被“外部化”到一個稱作建造者的對象里,建造者返還給客戶端的是一個已經建造完畢的完整產品對象,而用戶無須關心該對象所包含的屬性以及它們的組裝方式,這就是建造者模式的由來。

1.1 定義

  • 維基百科定義
    生成器模式(英:Builder Pattern)是一種設計模式,又名:建造模式,是一種對象構建模式。
    它可以將復雜對象的建造過程抽象出來(抽象類別),使這個抽象過程的不同實現方法可以構造出不同表現(屬性)的對象。

  • 簡單理解
    將一個復雜對象的構建與它的表示分離,使得同樣的構建過程,可以創建不同的表示.
    用戶只需指定需要建造的類型就可以得到它們,建造過程及細節不需要知道。

  • 通用流程
    先創建一個初始對象,然后逐漸添加新東西,最后調用 build() 方法完成構建。

1.2 類型

創建型

2 適用場景

在以下情況考慮使用生成器模式:

  • 當創建復雜對象的算法應該獨立于該對象的組成部分以及它們的裝配方式時
  • 當構造過程必須允許被構造的對象有不同的表示時
  • 一個對象有非常復雜的內部結構(很多屬性)
  • 想把復雜對象的創建和使用分離

3 優點

  • 封裝性好,創建和使用分離
  • 擴展性好、建造類之間獨立、一定程度上解耦

4 缺點

  • 產生多余的Builder對象
  • 產品內部發生變化,建造者都要修改,成本較大,所以需要精心設計

5 與其他設計模式的區別

5.1 與工廠模式的區別

工廠模式特點

  • 注重方法調用順序
  • 創建復雜的作品,有各種復雜的部件組成
  • 不止要創建出來,還要知道產品有哪些部件組成

生成器模式特點

  • 注重創建產品,不關心順序
  • 創建出來的都一個樣
  • 只要創建出來對象即可

6 來一場實戰的分析

  • 課程類
  • 課程建造者
  • 課程真正建造
  • 課程教練

7 開源框架應用實例

7.1 JDK#StringBuilder


方法幾乎都是返回一個自身實例

7.2 Guava不可變集合類


建造者內部類



和之前同理,必存在一個 build 方法

7.3 Spring-BeanDefinition


7.4 Mybatis - SqlSessionFactoryBuilder

  • 入參為一個配置,傳給默認的 session 工廠進行構造
  • 解析 mybatis 的 xml 文件


總結

以上是生活随笔為你收集整理的Java的生成器模式(又名建造者模式),你真的会了吗的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。