設計模式筆記——建造者模式

設計模式(創建型)—— 建造者模式

這是一個學生類,它有四個屬性,通過構造方法創建它的對象,我們需要填入四個參數,這就導致創建對象的代碼有點長(如果他有更多屬性時,那會更加恐怖),這看起來不太優雅

public class Student {public int id;public int age;public int grade;public String name;public Student(int id, int age, int grade, String name) {this.id = id;this.age = age;this.grade = grade;this.name = name;}
}

在之前,我們學習過通過StringBuilder來創建一個字符串,它就像一個建造者,可以這個字符串對象中不斷添加、刪除、修改,最終得到一個字符串對象,參考這種方法,我們是不是也可以設計一個創建學生對象的建造者(學生類的內部類)

public static class StudentBuilder {int id;int age;int grade;String name;public StudentBuilder id(int id) {this.id = id;return this;}public StudentBuilder age(int age) {this.age = age;return this;}public StudentBuilder grade(int grade) {this.grade = grade;return this;}public StudentBuilder name(String name) {this.name = name;return this;}public Student build() {return new Student(id, age, grade, name);}}

通過一個靜態方法,來獲取建造者對象

 //獲取建造者
public static StudentBuilder builder() {return new StudentBuilder();
}

這樣一來,我們就可以通過這樣一種方式得到一個對象

Student student = Student.builder().id(1).age(16).grade(9).name("張三").build();
System.out.println(student);

這看起來優雅多了,當然如果這個類只有兩三個簡單的屬性,我們依然可以采用最原始的構造方法來創建,建造者模式的優雅在屬性特別多時才能很好的體現

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

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

相關文章

賦能中國制造,大道云行發布智能制造分布式存儲解決方案

《中國制造2025》指出,“制造業是國民經濟的主體,是立國之本、興國之器、強國之基。” 智能制造引領產業提質增效 智能制造是一種利用先進的信息技術、自動化技術和智能技術來優化和升級制造業生產過程的方法。它將人工智能、大數據、物聯網、機器學習等…

算法競賽STL:map的使用方法

算法競賽STL:map的使用方法 map 容器描述: map是一種關聯容器,它存儲的元素是鍵值對,鍵和值可以是任意類型。map內部的元素按照鍵的順序進行排序,排序的規則由比較函數決定。 使用方法: 首先&#xff0c…

【擴散模型系列2】DiT 《Scalable Diffusion Models with Transformers》論文閱讀

文章目錄 摘要1. 前言2. 相關工作TransformersDDPMs架構復雜度 3. 擴散Transformer3.1 準備知識擴散公式Classifier-free GuidanceLDMs 3.2. Diffusion Transformer Design SpacePatch化DiT模塊設計模型大小Transformer Decoder 4. 實驗設置訓練擴散評估指標計算 5. 實驗DiT bl…

【前端】登陸頁面:記住密碼、設置cookie、加密

將保存在cookie中的密碼自動填入表單:庫js-cookie // login.vue getCookie() {const username Cookies.get("username");const password Cookies.get("password");const rememberMe Cookies.get(rememberMe)this.loginForm {username: use…

Material UI 5 學習01-按鈕組件

Material UI 5 學習01-按鈕組件 一、安裝Material UI二、 組件1、Button組件1、基礎按鈕2、variant屬性3、禁用按鈕4、可跳轉的按鈕5、disableElevation屬性6、按鈕的點擊事件onClick 2、Button按鈕的顏色和尺寸1、Button按鈕的顏色2、按鈕自定義顏色3、Button按鈕的尺寸 3、圖…

MacOS包管理工具homebrew使用教程

MacOS包管理工具homebrew使用教程 1.概述與安裝2.基本使用3.其他常用命令 1.概述與安裝 homebrew是Mac OS X上的強大的包管理工具,可以高效管理各種軟件包 安裝: 1、安裝xcode: xcode-select --install2、一行命令下載: /bin…

DreamTalk:單張圖像即可生成逼真人物說話頭像動畫,助力AI數字人落地

“DreamTalk: When Expressive Talking Head Generation Meets Diffusion Probabilistic Models” DreamTalk是一個基于擴散的音頻驅動的富有表現力的說話頭生成框架,可以生成不同說話風格的高質量的說話頭視頻。DreamTalk對各種輸入表現出強大的性能,包…

Thingsboard本地源碼部署教程

本章將介紹ThingsBoard的本地環境搭建,以及源碼的編譯安裝。本機環境:jdk11、maven 3.6.2、node v12.18.2、idea 2023.1、redis 6.2 環境安裝 開發環境要求: Jdk 11 版本 ;Postgresql 9 以上;Maven 3.6 以上&#xf…

vue實現循環滾動列表

本文章使用 vue-seamless-scroll 為大家分享了vue實現循環滾動列表的具體代碼,供大家參考,具體內容如下: vue實現循環滾動列表 1.安裝插件 vue-seamless-scroll vue-seamless-scroll 實例文檔 npm install vue-seamless-scroll --save 2.HTM…

代碼隨想錄算法訓練營Day50 | 123.買賣股票的最佳時機 III、188.買賣股票的最佳時機 IV

123.買賣股票的最佳時機 III 思路與 121.買賣股票I 一脈相承,一次買賣有2種狀態(持有/不持有),那么兩次買賣就有4種狀態(第一次持有/不持有、第二次持有/不持有) 1、DP數組定義: dp[i][j]為當前…

【Java】Base理論的核心思想和理論三要素

目錄 簡介 BASE 理論的核心思想 BASE 理論三要素 1. 基本可用 2. 軟狀態 3. 最終一致性 總結 簡介 BASE 是 Basically Available(基本可用) 、Soft-state(軟狀態) 和 Eventually Consistent(最終一致性&#xf…

深度強化學習系列【2】- 貝爾曼方程和馬爾可夫決策過程

引言: 一直想做點強化學習相關的內容,但是對于其原理一直不是太明了,相比于編程實現,懂得算法部分的機理與理論也是至關重要的。網上找的一些資料都在強調貝爾曼方程和馬爾可夫決策過程在強化學習中的作用,但是介紹都不夠充分。 另外,在知乎【1】上看到一個說法,說 強化學…

財報解讀:基本盤穩定后,聯想如何進一步搶占AI時代?

從2021年下半年開始,受諸多因素影響,消費電子行業始終處在承壓狀態,“不景氣”這一關鍵詞屢次被市場提及。 但寒氣沒有持續,可以看到,消費電子行業正在逐漸回暖。國金證券在今年1月的研報中就指出,從多方面…

【簡單模擬】第十一屆藍橋杯省賽第二場C++ B組 / C組《成績統計》(c++)

1.題目說明 小藍給學生們組織了一場考試,卷面總分為100 分,每個學生的得分都是一個 0 到 100 的整數。 如果得分至少是 60 分,則稱為及格。 如果得分至少為 85 分,則稱為優秀。 請計算及格率和優秀率,用百分數表示…

#WEB前端(CCS常用屬性,補充span、div)

1.實驗: 復合元素、行內元素、塊內元素、行內塊元素 2.IDE:VSCODE 3.記錄: span為行內元素:不可設置寬高,實際占用控件決定分布空間。 div為塊內元素:占滿整行,可以設置寬高 img為行內塊元…

Unity(第二十三部)導航

你可以使用 unity官方提供的 unity導航組件或第三方 unity導航組件,以實現游戲中角色或其他物體的導航。 unity導航組件通常具有多種導航模式,如飛行模式、步行模式、車輛模式等,可以根據不同的需求選擇合適的模式。同時,unity導…

2023年全國職業院校技能大賽中職組大數據應用與服務賽項題庫參考答案陸續更新中,敬請期待…

2023年全國職業院校技能大賽中職組大數據應用與服務賽項題庫參考答案陸續更新中,敬請期待… 武漢唯眾智創科技有限公司 2024 年 2 月 聯系人:辜渝儐13037102709 題號:試題01 模塊二:數據獲取與處理 (一)…

Ainx的全局配置

📕作者簡介: 過去日記,致力于Java、GoLang,Rust等多種編程語言,熱愛技術,喜歡游戲的博主。 📗本文收錄于Ainx系列,大家有興趣的可以看一看 📘相關專欄Rust初階教程、go語言基礎系列…

js中的閉包

理解 函數內部可以訪問其外函數中的作用域 作用 創建私有變量延長變量的聲明周期一般函數中的變量在函數返回之后就會被銷毀,但是閉包會保存使用的變量,即便是上下文被摧毀了,使用的變量依舊存在 閉包的用途 柯里化函數的目的就是在避免重復的調用變量案例 求一個長方形的…

ROS2 Python環境變量PYTHONPATH設置

文章目錄 引題解決方法方法一 將三方庫與pkg放在一起方法二 將三方庫放入pythonpath目錄 引題 ROS2在執行ros2 pkg create --build-type ament_python **創建python包時,有時候會涉及外部庫的導入,這里講解一下如何配置PYTHONPATH變量讓程序順利找到外部…