【分享】Java Builder 建造者模式之案例分享

介紹

建造者模式(Builder)核心目的是通過使用多個簡單對象一步步構建出一個復雜對象。通過將復雜對象的構造過程拆分為多個簡單的步驟,使得創建對象更加靈活,可讀性和可維護性更強。


使用場景

  • 創建一個由多個部分組成的復雜對象,需要遵循特定順序創建對象
  • 相同的構建過程可以創建不同的對象表現(類似構造器重載)
  • 不影響代碼原來的功能情況下,方便擴展新的組成部分

建造者模式組成部分

  • 產品(Product):表示最終要構建的復雜對象
  • 建造者(Builder):定義用于構建產品的接口,包含創建產品各個部分的方法
  • 具體建造者(Concrete Builder):實現Builder接口,完成產品各個部分的具體構建工作。
  • 指揮者(Director):負責調用合適的建造者方法,按照特定順序組裝產品。

代碼案例

在這個示例代碼中,我們有一個Pizza類,它有4個屬性:面團、醬料、奶酪和配料。我們使用內部類Builder來構建Pizza實例。

public class Pizza {private String dough;private String sauce;private String cheese;private List<String> toppings;private Pizza(Builder builder) {this.dough = builder.dough;this.sauce = builder.sauce;this.cheese = builder.cheese;this.toppings = builder.toppings;}public static class Builder {private String dough;private String sauce;private String cheese;private List<String> toppings = new ArrayList<String>();public Builder(String dough, String sauce) {this.dough = dough;this.sauce = sauce;}public Builder cheese(String cheese) {this.cheese = cheese;return this;}public Builder toppings(String... toppings) {this.toppings.addAll(Arrays.asList(toppings));return this;}public Pizza build() {return new Pizza(this);}}@Overridepublic String toString() {return "Pizza{" +"dough='" + dough + '\'' +", sauce='" + sauce + '\'' +", cheese='" + cheese + '\'' +", toppings=" + toppings +'}';}
}

Builder類中,我們有一個構造函數,它接受面團和醬料作為參數。我們還有兩個方法cheesetoppings,用于設置cheesetoppings屬性。

最后,我們有一個build方法,它返回一個新的Pizza實例。

使用建造者模式,我們可以這樣構建一個Pizza實例:

Pizza pizza = new Pizza.Builder("Thin Crust", "Tomato Sauce").cheese("Mozzarella").toppings("Pepperoni", "Mushrooms", "Onions").build();System.out.println(pizza);

控制臺輸出:

Pizza{dough='Thin Crust', sauce='Tomato Sauce', cheese='Mozzarella', toppings=[Pepperoni, Mushrooms, Onions]}

小結

Builder模式是為了創建一個復雜的對象,需要多個步驟完成創建,或者需要多個零件組裝的場景,且創建過程中可以靈活調用不同的步驟或組件。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/163410.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/163410.shtml
英文地址,請注明出處:http://en.pswp.cn/news/163410.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

這樣寫Allure生成測試報告,學會直接漲薪5k

Allure是一個開源的測試報告生成框架&#xff0c;提供了測試報告定制化功能&#xff0c;相較于我們之前使用過pytest-html插件生成的html格式的測試報告&#xff0c;通過Allure生成的報告更加規范、清晰、美觀。 pytest框架支持使用Allure生成測試報告&#xff0c;接下來讓介紹…

SpringBoot整合knife4j生成Api文檔

一、介紹 先看效果 ①&#xff1a;Swagger 介紹 Swagger 是一個規范和完整的框架&#xff0c;用于生成、描述、調用和可視化 RESTful 風格的 Web 服務(https://swagger.io/)。 它的主要作用是&#xff1a; 使得前后端分離開發更加方便&#xff0c;有利于團隊協作 接口的文檔…

Doris-集群部署(四)

創建目錄并拷貝編譯后的文件 1&#xff09;創建目錄并拷貝編譯后的文件 mkdir /opt/module/apache-doris-0.15.0 cp -r /opt/software/apache-doris-0.15.0-incubating-src/output /opt/module/apache-doris-0.15.02&#xff09;修改可打開文件數&#xff08;每個節點&#x…

oracle數據庫巡檢常見腳本-系列三

簡介 作為數據庫管理員&#xff08;DBA&#xff09;&#xff0c;定期進行數據庫的日常巡檢是非常重要的。以下是一些原因&#xff1a; 保證系統的穩定性&#xff1a;通過定期巡檢&#xff0c;DBA可以發現并及時解決可能導致系統不穩定的問題&#xff0c;如性能瓶頸、資源利用率…

TIDB基礎

TIDB整個邏輯架構跟MYSQL類似&#xff0c;如下&#xff1a; TIDB集群&#xff1a;相當于MYSQL的數據庫服務器&#xff0c;區別是MYSQL數據庫服務器為單進程的&#xff0c;TIDB集群為分布式多進程的。 數據庫&#xff1a;同MYSQL數據庫&#xff0c;數據庫屬于集群&#xff0c;…

VM CentOS7安裝ffmpeg

項目中涉及給視頻添加水印&#xff0c;使用到了ffmpeg&#xff0c;windows系統可直接使用&#xff0c;Linux需要手動編譯完成ffmpeg后才可正常使用。 配置yum源: 備份原repo文件 cd /etc/yum.repos.d/mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.r…

編寫自己的CA和TA與逆向

參考內容《手機安全和可信應用開發》 https://note.youdao.com/s/MTlG4c1w 介紹 TA的全稱是Trust Application&#xff0c; 即可信任應用程序。 CA的全稱是Client Applicant&#xff0c; 即客戶端應用程序。 TA運行在OP-TEE的用戶空間&#xff0c; CA運行在REE側。 CA執行時代…

前端 Ajax 技術有哪些優缺點?

Ajax&#xff08;Asynchronous JavaScript and XML&#xff09;是一種基于前端 JavaScript 技術的異步通信技術&#xff0c;可以在不刷新整個頁面的情況下向服務器發送請求和接收響應&#xff0c;以實現動態加載內容和交互效果。下面是 Ajax 技術的優缺點&#xff1a; 優點&am…

css實現三行,溢出顯示省略號(后有js實現邏輯)

css實現代碼&#xff1a; .text-container {display: -webkit-box;-webkit-box-orient: vertical;-webkit-line-clamp: 3;overflow: hidden;text-overflow: ellipsis; }解釋&#xff1a; 1.-webkit-box 和 -webkit-box-orient 屬性將容器元素設置為一個垂直方向的彈性盒子&…

需求調研計劃及用戶需求調研單

1.目的 2.概述 3.需求調研計劃 3.1調研目的 3.2調研范圍 3.2.1.調研的職能范圍 3.2.2.調研的業務范圍 3.2.3.調研的地點范圍 3.3調研方式 3.4調研階段 3.5具體時間安排 軟件開發全文檔獲取&#xff1a;點我獲取 1、需求調研計劃 2、用戶需求調研單 項目名稱 客…

C++ auto的作用

auto的作用 保護變量的值不被修改&#xff0c;防止意外的錯誤操作&#xff1b;聲明函數參數為常量引用&#xff0c;以避免函數修改參數的值&#xff1b;聲明類的成員函數為常量成員函數&#xff0c;以確保函數不修改對象的狀態。 1 const關鍵字用于聲明一個常量&#xff0c;…

【EI會議投稿】第九屆電子技術和信息科學國際學術會議(ICETIS 2024)

第九屆電子技術和信息科學國際學術會議&#xff08;ICETIS 2024&#xff09; The 9th International Conference on Electronic Technology andInformation Science&#xff08;ICETIS 2024&#xff09; ICETIS會議始于2016年&#xff0c;先后吸引眾多來自國內外高等院校、科…

2023亞太杯數學建模競賽C題新能源電動汽車數據分析與代碼講解

C題論文包括摘要、問題重述、問題分析、模型假設、符號說明、模型的建立和求解&#xff08;問題1模型的建立和求解、問題2模型的建立和求解、問題3模型的建立和求解、問題4模型的建立和求解、問題5模型的建立和求解&#xff09;、模型的評價等等&#xff0c; 視頻講解如下&…

組件庫篇 | EUI | 按鈕

組件庫篇 | EUI | 按鈕 前言 從本章開始,我將會一一演示所有組件所有函數的調用代碼,以方便讀者掌握組件的具體用法。但這并不意味著在實際使用中要用到所有的函數,請讀者按需取用。 基本介紹 EUI提供了三種類型的按鈕,如下: 常規按鈕 Button文字按鈕 TextButton圖標按鈕…

《洛谷深入淺出基礎篇》P1113 雜物——DAG

上鏈接&#xff1a;P1113 雜務 - 洛谷 | 計算機科學教育新生態 (luogu.com.cn)https://www.luogu.com.cn/problem/P1113 上題干&#xff1a; 題目描述 John 的農場在給奶牛擠奶前有很多雜務要完成&#xff0c;每一項雜務都需要一定的時間來完成它。比如&#xff1a;他們要將奶牛…

編寫SQL語句,場景:從一張表中查詢某字段是逗號分隔的集合值,需要遍歷集合內每個值,將其作為條件去查詢另一張表,最終返回列表

目錄 場景編寫SQL分頁獲取該開票單號下的所有訂單列表使用子查詢和 in 字句使用 find_in_set 場景 從一張表中查詢某字段是逗號分隔的集合值&#xff0c;需要遍歷集合內每個值&#xff0c;將其作為條件去查詢另一張表&#xff0c;最終返回列表 編寫SQL 分頁獲取該開票單號下…

羊大師詳解羊奶如何幫助控制血壓

羊大師詳解羊奶如何幫助控制血壓 羊奶是一種珍貴的天然飲品&#xff0c;不僅具有豐富的營養成分&#xff0c;還被證實對血壓具有調控作用。很多人在了解到羊奶的功效后&#xff0c;都對其與血壓之間的關系產生了濃厚的興趣。接下來&#xff0c;小編羊大師將為大家詳細介紹羊奶…

Linux基本命令與系統題目

1.linux 2.6.* 內核默認支持的文件系統有哪些&#xff1f;[多選] A.ext3 B.ext2 C.ext4 D.xfs E.ufs 2.linux查看cpu占用的命令是什么&#xff1f; A.top B.netstat C.free D.df 3.在Linux系統中, 為找到文件try_grep含有以a字母為行開頭的內容, 可以使用命令&…

算法復雜度分析

文章目錄 有數據范圍反推算法復雜度以及算法內容一般方法遞歸 有數據范圍反推算法復雜度以及算法內容 c一秒可以算 1 0 7 10^7 107~ 1 0 8 10^8 108次 一般方法 看循環 有幾層循環就可以初步分析O( n i n^i ni) 雙指針算法除外O(n) 遞歸 公式法 根據公式的形式&#xff0…