java 創建者設計模式_Java設計模式之創建者模式分享熱愛編程,程序人生

PS:今天的23中設計模式中的創建者方式,至此告一段落。我今天帶來的技術分享為創建者模式以及原型模式。當然在Java中這兩種方式很常見,只不過我們寫的次數確實有點低而已,但是這不是我不學它的借口!!!

創建者模式

無構建者模式代碼示例:需求創建一個摩托車對象 并且使其開始運行。

發動機代碼構建:

97a155fcd79a88ad2beae4db2c10b657.png

發動機代碼構鍵

車架代碼實例:

647ca39debf0671698646071343d8e10.png

車架代碼實例

輪胎機代碼示例:

ad37ef2b2a28d38d1c829ab46410a939.png

輪胎機代碼示

摩托車對象實體類:

045144d100017c199484017d07683468.png

摩托車對象實體類

測試類:

49eff235e01929002fdd01e05f563fc9.png

測試類

總結:摩托車對象時一個大對象:構建過程中可能需要很多其他對象的使用,比如:車架、發動機、輪胎 所以如果每次摩托車對象的創建,都需要其他對象 并且調用者都需要知道摩托車的具體細節,這樣對于調 用者來說是很痛苦的。所以在這個基礎之上,我們希望 是否可以將調用者和創建者進行解耦。

作用:

當一個類的內部數據過于復雜的時候(通常是負責持有數據的類,比如Config、VO、PO、Entity...),要創建的話可能就需要了解這個類的內部結構,還有這些東西是怎么組織裝配等一大坨亂七八糟的東西,這個時候就會增加學習成本而且會很混亂,這個時候就想啊想一種什么法子來管理一下這個類中的數據呢,怎么在創建的時候讓它按部就班的來,并且代碼可讀性很好別讓我看花了眼啊,我要的東西也能都很好設置進來,這就是Builder模式的應用場景,Builder模式可以將一個類的構建和表示進行分離。

常見的使用場景:構建比較復雜的產品。

StringBuilder DomBuilder SaxBuilder

Sql中的PreparedStatement

構建者類圖總結

80d0a282dcce6f5b65a1a990f8bc5308.png

類圖總結

總結:以上,調用者無需知道具體的構建者中的具體構建順序,調用者專注于自己的業務即可。實現了解耦。但是這里最重要的就是構建順序,不同的builder’可以構建不同的實例對象

案例測試:需求構建一個對應品牌的手機對象。調用者無需知道具體的對象的調用細則。

手機實體類構建代碼:

0586e8a0bf152e0e95cd964916ac5712.png

實體手機類

構建者接口以及對應實現 :

758d21954a1a78e68810ec4072b5e8dd.png

構建者接口以及對應實現

裝配接口以及對應實現:

2075ab17d7c43432e6ed1ea8da1f6dc5.png

裝配接口以及對應實現

測試類:

437908b6bc3b6036c05880d89a170e20.png

測試類

總結:以及需工廠的區別

a、將一個對象底層的依賴 全部交由builder執行,具體的建造順序,由builder指定。然后由director負責完成裝配過程。調用者無需知道底層的具體順序以及裝配過程。如果不滿足需要則直接重新創建builder,完成具體的建造順序

b、建造者模式關注與對象創建的具體過程,而工廠則關注于最后創建對象的結果。

c、如果構建出來的對象差異較大,需要多個構建者才能完成。所以會借助到單例或者工廠一起使用。

拓展:

需求,構建類似于一個對象,但是對象構建時,屬性很多。有可能忘記屬性,或者屬性沒寫全。那么當前這個對象就無法創建,通過創建者模式解決問題。

實現代碼:

f37dc4a274fb90bbdf75051d54856f83.png

實現代碼

測試類:

30ec64893fc584f5054ea0d71b601ad8.png

測試類

PS:大家有什么想要分享的內容!可以在評論下方留言!!!

更多行業資訊請關注:百戰程序員,喜歡請分享轉發

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

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

相關文章

一文讀懂電感器的原理、結構、作用及分類

電感器是能夠把電能轉化為磁能而存儲起來的元件。電感器的結構類似于變壓器,但只有一個繞組。電感器具有一定的電感,它只阻礙電流的變化。 如果電感器在沒有電流通過的狀態下,電路接通時它將試圖阻礙電流流過它;如果電感器在有電流…

final關鍵字與static對比

final關鍵字與static對比 static關鍵字修飾變量時,會使該變量在類加載時就會被初始化,不會因為對象的創建再次被加載,當變量被static 修飾時就代表該變量只會被初始化一次 例如圖中所示,被static修飾的變量j,雖然創建…

juce中的BailOutChecker

界面庫中值得注意的一點就是對象響應事件的時候自身被刪除了,那么后續的訪問自然就會出問題,所以需要在響應事件之后先添加引用,相關處理之后再查看自身是否已經被刪除,如果已經被刪除那么就直接退出。juce中通過BailOutChecker來…

java quartz 跳過_Java Quartz計劃作業-禁止同時執行作業

我正在使用Quartz Job執行特定任務。我也在我的Main應用程序類中安排它的執行,而我試圖完成的工作是不允許同時執行此作業的實例。因此,調度程序僅應在其先前實例完成后才執行作業。這是我的工作班級:public class MainJob implements Job {s…

mac USB串口工具配置

安裝USB serial 驅動 我的usb serial芯片是 pl2303, 先到官網上下載對應驅動,并安裝。安裝完成之后會要求重啟。 http://www.prolific.com.tw/admin/Technology/GetFile.ashx?fileID238 安裝 minicom https://alioth.debian.org/projects/minicom/ 下載源碼&…

macpro生成公鑰并查看公鑰

打開macpro的終端輸入以下命令: $ cd ~/.ssh $ ls 此時發現沒有那個id_rsa.pub文件,沒有,就需要創建公鑰 用ssh-keygen創建公鑰 此時已經有了

java join 源碼_join on 和where 一起使用的細節

left join :左連接,返回左表中所有的記錄以及右表中連接字段相等的記錄。right join :右連接,返回右表中所有的記錄以及左表中連接字段相等的記錄。inner join: 內連接,又叫等值連接,只返回兩個表中連接字段相等的行。full join:外…

SSIS 學習之旅 FTP訪問類

這章把腳本任務訪問FTP的方法 全部給大家。 控件的使用大家如果有不懂得可以看下我之前的文章。第一章:SSIS 學習之旅 第一個SSIS 示例(一)(上) 第二章:SSIS 學習之旅 第一個SSIS 示例(二&#…

Spring Cloud Feign 使用Apache的HTTP Client替換Feign原生httpclient

http 連接池能提升性能 http 的背景原理 a. 兩臺服務器建立 http 連接的過程是很復雜的一個過程,涉及到多個數據包的交換,并且也很耗時間。 b. Http 連接需要的 3 次握手 4 次分手開銷很大,這一開銷對于大量的比較小的 http 消息來說更大。…

Java容器坐標起點_Java的屏幕坐標是以像素為單位,容器的左下角被確定為坐標的起點...

【單選題】【單選題】【單選題】class A{ int x1; void func1(int x1){ this.x1 x1; } } 關于上述程序,說法錯誤的是( )【單選題】瀏覽器的作用是( )。【判斷題】構建大學生心理危機預警及干預工作機制,更好地幫助有嚴重心理問題的學生度過心理難關,及早預防、及時疏導、有效干…

自媒體工具:文本內容轉音頻文件實用小工具

目錄 ?編輯 1、軟件介紹 2、軟件技術框架 3、使用說明 4、核心代碼文件 5、注意事項 1、軟件介紹 文本內容轉轉音頻文件小工具,采用C#編程語言,基于Framework4.5開發,主要采用百度語音識別SDK,實現了在線文本內容轉音頻文件的功能…

IDEA 創建 SpringCloud項目-多項目方式

SpringCloud 雖然可以用多模塊化的方式來創建,但是,SpirngCloud本身就是為分布式而準備的,如果使用多模塊的話,那就是一個項目,偏離了分布式的概念。所以工程上還是常用多項目的方式,這樣才可以分開布署各個…

php位運算重要嗎,PHP位運算的用途

下面為大家帶來一篇PHP位運算的用途。現在就分享給大家,也給大家做個參考。一起過來看看吧在實際應用中可以做用戶權限的應用我這里說到的權限管理辦法是一個普遍采用的方法,主要是使用到”位運行符”操作,& 位與運算符、| 位或運行符。參…

盤點6款實用的文件對比工具,你都用過嗎?

??作者主頁:IT技術分享社區 ??作者簡介:大家好,我是IT技術分享社區的博主,從事C#、Java開發九年,對數據庫、C#、Java、前端、運維、電腦技巧等經驗豐富。 ??個人榮譽: 數據庫領域優質創作者🏆&#x…

aggregations 詳解1(概述)

aggregation分類 aggregations —— 聚合,提供了一種基于查詢條件來對數據進行分桶、計算的方法。有點類似于 SQL 中的 group by 再加一些函數方法的操作。 聚合可以嵌套,由此可以組成復雜的操作(Bucketing聚合可以包含sub-aggregation&#…

IDEA開發中,類的頭位置生成作者時間信息

點擊 File > Settings > File and Code Templates > Class按照圖中步驟添加如下信息 #if (${PACKAGE_NAME} && ${PACKAGE_NAME} ! "")package ${PACKAGE_NAME};#end #parse("File Header.java") /** * Author WangZeyu * Date ${…

提現接口網站 php,API提現接口

>獲取提現積分的類型,在后臺可以設置某種積分可被提現,此處獲取的數據為可提現積分的類型~~~[api]get:/index.php/accounts/Apipoint/member_withdrawal_listint:type 0#是否智能限制提現積分類型,0:不智能,1&#…

數據庫:PostgreSQL 和 MySQL對比

比較版本:PostgreSQL 11 VS MySQL5.7(innodb引擎) Oracle官方社區版版權情況:PostgreSQL 11(免費開源)、MySQL5.7 Oracle官方社區版(免費開源) 1. CPU限制 PGSQL沒有CPU核心數限制&a…

C#獲取當前系統磁盤符、系統目錄、桌面等

1.獲取方式如下 Environment.SpecialFolder中定義了許多常用的目錄 //獲取當前系統磁盤符方法1,返回:C: string path Environment.GetEnvironmentVariable("systemdrive"); //獲取當前系統磁盤符方法2,返回:C: string path Envir…

MAC電腦常用效率工具推薦

??作者主頁:IT技術分享社區 ??作者簡介:大家好,我是IT技術分享社區的博主,從事C#、Java開發九年,對數據庫、C#、Java、前端、運維、電腦技巧等經驗豐富。 ??個人榮譽: 數據庫領域優質創作者🏆&#x…