Java建造者模式構(gòu)建復(fù)雜對(duì)象的最佳實(shí)踐
介紹
Java中的建造者模式是一種創(chuàng)建型設(shè)計(jì)模式,它的主要目的是為了通過一系列簡單的步驟構(gòu)建復(fù)雜的對(duì)象,允許創(chuàng)建復(fù)雜對(duì)象的不同表示形式,同時(shí)隱藏構(gòu)造細(xì)節(jié).它能夠逐步構(gòu)建對(duì)象,即先創(chuàng)建基本對(duì)象,然后逐步添加更多屬性或部件,直到最終構(gòu)建出完整的對(duì)象.
該模式的主要思想是將對(duì)象的構(gòu)造過程分解成多個(gè)步驟,每個(gè)步驟都可以獨(dú)立運(yùn)行,并且在每個(gè)步驟完成后都可以返回一個(gè)中間狀態(tài),然后使用一個(gè)導(dǎo)演類來協(xié)調(diào)這些步驟,最終創(chuàng)建出完整的對(duì)象.
建造者模式通常包括一下角色:
- 產(chǎn)品類(Product):被構(gòu)造出來的復(fù)雜對(duì)象,它具有多個(gè)屬性或部件.
- 抽象構(gòu)造者類(Builder):定義了構(gòu)建復(fù)雜對(duì)象所需的方法和屬性.
- 具體建造者類(ConcreteBuilder):實(shí)現(xiàn)抽象建造者類中定義的方法和屬性,并返回最終構(gòu)造的對(duì)象
- 導(dǎo)演類(Director):負(fù)責(zé)協(xié)調(diào)各個(gè)具體建造者類的構(gòu)建過程,以及返回最終構(gòu)造的對(duì)象,
實(shí)現(xiàn)
首先創(chuàng)建一個(gè)產(chǎn)品類
package com.fanqiechaodan.build; import lombok.Data; /** * @Classname Car * @Description 產(chǎn)品類 */ @Data public class Car { private String brand; private String model; private String color; private int maxSpeed; }
其次創(chuàng)建抽象建造者類
package com.fanqiechaodan.build; /** * @Classname CarBuilder * @Description 抽象建造者類 */ public abstract class CarBuilder { protected Car car; public CarBuilder(){ car = new Car(); } public abstract void buildBrand(); public abstract void buildModel(); public abstract void buildColor(); public abstract void buildMaxSpeed(); public Car getCar() { return car; } }
然后創(chuàng)建具體構(gòu)造者類
package com.fanqiechaodan.build; /** * @Classname BMWBuilder * @Description 具體構(gòu)造者類 */ public class BMWBuilder extends CarBuilder { @Override public void buildBrand() { car.setBrand("BMW"); } @Override public void buildModel() { car.setModel("X6"); } @Override public void buildColor() { car.setColor("Black"); } @Override public void buildMaxSpeed() { car.setMaxSpeed(218); } }
創(chuàng)建導(dǎo)演類
package com.fanqiechaodan.build; /** * @Classname Director * @Description 導(dǎo)演類 */ public class Director { private CarBuilder carBuilder; public Director(CarBuilder carBuilder) { this.carBuilder = carBuilder; } public Car constructCar() { carBuilder.buildBrand(); carBuilder.buildColor(); carBuilder.buildMaxSpeed(); carBuilder.buildModel(); return carBuilder.getCar(); } }
測試
package com.fanqiechaodan.build; /** * @Classname Demo * @Description 建造者模式 */ public class Demo { public static void main(String[] args) { CarBuilder carBuilder = new BMWBuilder(); Director director = new Director(carBuilder); Car car = director.constructCar(); System.out.println(car.toString()); } }
總結(jié)
優(yōu)點(diǎn):
- 簡化對(duì)象創(chuàng)建的過程:建造者模式可以將對(duì)象的構(gòu)造過程分解為多個(gè)步驟,使得對(duì)象的創(chuàng)建變得簡單明了,易于維護(hù)和擴(kuò)展
- 提高可讀性:由于每個(gè)構(gòu)建步驟都有一個(gè)明確的名稱,因此代碼更具有可讀性和可維護(hù)性.
- 靈活性:建造者模式允許您根據(jù)需要使用不同的構(gòu)建起創(chuàng)建不同的對(duì)象,從而提高了靈活性和可重用性.
缺點(diǎn):
- 建造者模式需要?jiǎng)?chuàng)建多個(gè)對(duì)象,因此可能會(huì)增加系統(tǒng)的內(nèi)存開銷.
- 由于建造者模式需要編寫多個(gè)類,因此可能會(huì)增加代碼量和復(fù)雜性.
應(yīng)用場景:
- 當(dāng)對(duì)象需要多個(gè)步驟才能創(chuàng)建時(shí),可以使用建造者模式
- 當(dāng)需要?jiǎng)?chuàng)建多個(gè)不同的對(duì)象時(shí),可以使用建造者模式,每個(gè)對(duì)象的構(gòu)造過程可以由不同的構(gòu)建器來完成
- 當(dāng)對(duì)象的構(gòu)造過程非常復(fù)雜或需要進(jìn)行多項(xiàng)配置時(shí),可以使用建造者模式
- 總的來說,建造者模式非常適合創(chuàng)建復(fù)雜的對(duì)象,并且使代碼更加靈活和已于擴(kuò)展.
到此這篇關(guān)于Java建造者模式構(gòu)建復(fù)雜對(duì)象的最佳實(shí)踐的文章就介紹到這了,更多相關(guān)Java建造者模式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用Java實(shí)現(xiàn)構(gòu)建jenkins的多個(gè)job并返回構(gòu)建結(jié)果示例
這篇文章主要介紹了使用Java實(shí)現(xiàn)構(gòu)建jenkins的多個(gè)job并返回構(gòu)建結(jié)果示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-05-05Mybatis-plus中IService接口的基本使用步驟
Mybatis-plus是一個(gè)Mybatis的增強(qiáng)工具,它提供了很多便捷的方法來簡化開發(fā),IService是Mybatis-plus提供的通用service接口,封裝了常用的數(shù)據(jù)庫操作方法,包括增刪改查等,下面這篇文章主要給大家介紹了關(guān)于Mybatis-plus中IService接口的基本使用步驟,需要的朋友可以參考下2023-06-06Spring @Lookup深入分析實(shí)現(xiàn)原理
這篇文章主要介紹了Spring @Lookup實(shí)現(xiàn)原理,我們知道在spring容器中單獨(dú)的一個(gè)抽象類是不能成為一個(gè)bean的,那么有沒有辦法呢?這個(gè)時(shí)候我們可以使用Lookup注解2023-01-01Idea?編譯并運(yùn)行?Spark?3.1.1?源碼的方法
這篇文章主要介紹了Idea?編譯并運(yùn)行?Spark?3.1.1源碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-11-11JavaWeb實(shí)現(xiàn)文件上傳下載功能實(shí)例解析
這篇文章主要為大家詳細(xì)介紹了JavaWeb中的文件上傳和下載功能的實(shí)現(xiàn),在Web應(yīng)用系統(tǒng)開發(fā)中,文件上傳和下載功能是非常常用的功能,需要的朋友可以參考下2015-08-08Java框架學(xué)習(xí)Struts2復(fù)選框?qū)嵗a
這篇文章主要介紹了Java框架學(xué)習(xí)Struts2復(fù)選框?qū)嵗a,分享了相關(guān)代碼示例,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-02-02Springboot實(shí)現(xiàn)多數(shù)據(jù)源切換詳情
這篇文章主要介紹了Springboot實(shí)現(xiàn)多數(shù)據(jù)源切換詳情,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的朋友可以參考一下2022-09-09LeetCode?動(dòng)態(tài)規(guī)劃之矩陣區(qū)域和詳情
這篇文章主要介紹了LeetCode?動(dòng)態(tài)規(guī)劃之矩陣區(qū)域和詳情,文章基于Java的相關(guān)資料展開對(duì)LeetCode?動(dòng)態(tài)規(guī)劃的詳細(xì)介紹,需要的小伙伴可以參考一下2022-04-04