电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Java通俗易懂系列設計模式之建造者模式

瀏覽:10日期:2022-08-13 17:55:33
介紹

今天我們將研究java中的Builder模式。Builder 設計模式是一種創造性的設計模式,如工廠模式和抽象工廠模式。當Object包含許多屬性時,引入了Builder模式來解決Factory和Abstract Factory設計模式的一些問題。當Object包含許多屬性時,Factory和Abstract Factory設計模式存在三個主要問題。

從客戶端程序傳遞到Factory類的參數太多,可能容易出錯,因為大多數情況下,參數的類型是相同的,而從客戶端來說,很難維護參數的順序。 一些參數可能是可選的,但在Factory模式中,我們被迫發送所有需要發送為NULL的參數和可選參數。 如果對象很重并且它的創建很復雜,那么所有這些復雜性都將成為Factory類的一部分,令人困惑。

我們可以通過提供具有所需參數的構造函數然后使用不同的setter方法來設置可選參數來解決大量參數的問題。這種方法的問題是,除非明確設置所有屬性,否則Object狀態將不一致。

Builder模式通過提供逐步構建對象的方法并提供實際返回最終Object的方法,解決了大量可選參數和不一致狀態的問題。

意圖

將復雜對象的構造與其表示分開,以便相同的構造過程可以創建不同的表示。

定義

現實世界的例子:

想象一下角色扮演游戲的角色生成器。最簡單的選擇是讓計算機為您創建角色。但是如果你想選擇職業,性別,頭發顏色等角色細節,那么角色生成將成為一個循序漸進的過程,在所有選擇準備就緒時完成。

簡單來說:

允許您創建不同風格的對象,同時避免構造函數被污染。當有幾種不同的構造函數時很有用。或者在創建對象時涉及很多步驟。

維基百科說:

構建器模式是對象創建軟件設計模式,其目的是找到伸縮構造器反模式的解決方案。

話雖如此,讓我補充說一下伸縮構造器反模式是什么。某時某刻,我們都會看到如下構造函數:

public Hero(Profession profession, String name, HairType hairType, HairColor hairColor, Armor armor, Weapon weapon) {}

正如您所看到的,構造函數參數的數量很快就會失控,并且可能很難理解參數的排列。此外,如果您希望將來添加更多選項,此參數列表可能會繼續增長。這就被稱為'the telescoping constructor anti-pattern'(可伸縮構造器的反模式)。

理智的替代方案是使用Builder模式。

實例

讓我們看看如何在java中實現構建器設計模式。

首先,您需要創建一個靜態嵌套類,然后將所有參數從外部類復制到Builder類。我們應該遵循命名約定,如果類名是Computer那么構建器類應該命名為ComputerBuilder。 Java Builder類應該有一個公共構造函數,其中包含所有必需的屬性作為參數。 Java Builder類應具有設置可選參數的方法,并且應在設置可選屬性后返回相同的Builder對象。 最后一步是build()在構建器類中提供一個方法,該方法將返回客戶端程序所需的Object。為此,我們需要在Class中使用Builder類作為參數的私有構造函數。

下面是示例構建器模式示例代碼,首先,我們有我們想要創造的英雄

public final class Hero { private final Profession profession; private final String name; private final HairType hairType; private final HairColor hairColor; private final Armor armor; private final Weapon weapon; private Hero(Builder builder) { this.profession = builder.profession; this.name = builder.name; this.hairColor = builder.hairColor; this.hairType = builder.hairType; this.weapon = builder.weapon; this.armor = builder.armor; }}

然后我們有了建設者

public static class HeroBuilder { private final Profession profession; private final String name; private HairType hairType; private HairColor hairColor; private Armor armor; private Weapon weapon; public Builder(Profession profession, String name) { if (profession == null || name == null) {throw new IllegalArgumentException('profession and name can not be null'); } this.profession = profession; this.name = name; } public Builder withHairType(HairType hairType) { this.hairType = hairType; return this; } public Builder withHairColor(HairColor hairColor) { this.hairColor = hairColor; return this; } public Builder withArmor(Armor armor) { this.armor = armor; return this; } public Builder withWeapon(Weapon weapon) { this.weapon = weapon; return this; } public Hero build() { return new Hero(this); } }

請注意,Hero類只有getter方法,沒有公共構造函數。因此,獲取Hero對象的唯一方法是通過HeroBuilder類。

然后它可以用作如下,顯示如何使用Builder類來獲取對象:

Hero mage = new Hero.HeroBuilder(Profession.MAGE, 'Riobard').withHairColor(HairColor.BLACK).withWeapon(Weapon.DAGGER).build();使用場景

使用Builder模式時

用于創建復雜對象的算法應該獨立于構成對象的部分以及它們如何組裝 構造過程必須允許對構造的對象進行不同的表示JDK中的Builder設計模式示例

Java類中的一些構建器模式示例是;

java.lang.StringBuilder#append()(未同步) java.lang.StringBuffer#append()(synchronized)總結

優點:

建造者獨立,易擴展。 便于控制細節風險。

缺點:

產品必須有共同點,范圍有限制。 如內部變化復雜,會有很多的建造類。

注意事項:

與工廠模式的區別是:建造者模式更加關注與零件裝配的順序。

以上就是Java通俗易懂系列設計模式之建造者模式的詳細內容,更多關于Java設計模式的資料請關注好吧啦網其它相關文章!

標簽: Java
相關文章:
主站蜘蛛池模板: 钣金加工厂家-钣金加工-佛山钣金厂-月汇好| 空气能采暖,热泵烘干机,空气源热水机组|设备|厂家,东莞高温热泵_正旭新能源 | 5nd音乐网|最新流行歌曲|MP3歌曲免费下载|好听的歌|音乐下载 免费听mp3音乐 | 一体化预制泵站-一体化提升泵站-一体化泵站厂家-山东康威环保 | 联系我们-腾龙公司上分客服微信19116098882 | 铝镁锰板厂家_进口钛锌板_铝镁锰波浪板_铝镁锰墙面板_铝镁锰屋面-杭州军晟金属建筑材料 | 酒店品牌设计-酒店vi设计-酒店标识设计【国际级】VI策划公司 | 万濠投影仪_瑞士TRIMOS高度仪_尼康投影仪V12BDC|量子仪器 | 自动化展_机器人展_机床展_工业互联网展_广东佛山工博会 | 高速龙门架厂家_监控杆_多功能灯杆_信号灯杆_锂电池太阳能路灯-鑫世源照明 | 济南玻璃安装_济南玻璃门_济南感应门_济南玻璃隔断_济南玻璃门维修_济南镜片安装_济南肯德基门_济南高隔间-济南凯轩鹏宇玻璃有限公司 | 塑料脸盆批发,塑料盆生产厂家,临沂塑料广告盆,临沂家用塑料盆-临沂市永顺塑业 | 济南品牌设计-济南品牌策划-即合品牌策划设计-山东即合官网 | 水冷散热器_水冷电子散热器_大功率散热器_水冷板散热器厂家-河源市恒光辉散热器有限公司 | 布袋除尘器|除尘器设备|除尘布袋|除尘设备_诺和环保设备 | 档案密集架_电动密集架_移动密集架_辽宁档案密集架-盛隆柜业厂家现货批发销售价格公道 | 车间除尘设备,VOCs废气处理,工业涂装流水线,伸缩式喷漆房,自动喷砂房,沸石转轮浓缩吸附,机器人喷粉线-山东创杰智慧 | 酸度计_PH计_特斯拉计-西安云仪 纯水电导率测定仪-万用气体检测仪-低钠测定仪-米沃奇科技(北京)有限公司www.milwaukeeinst.cn | 模具硅橡胶,人体硅胶,移印硅胶浆厂家-宏图硅胶科技 | 石家庄网站建设|石家庄网站制作|石家庄小程序开发|石家庄微信开发|网站建设公司|网站制作公司|微信小程序开发|手机APP开发|软件开发 | 深圳宣传片制作-企业宣传视频制作-产品视频拍摄-产品动画制作-短视频拍摄制作公司 | 硫化罐_蒸汽硫化罐_大型硫化罐-山东鑫泰鑫智能装备有限公司 | 环氧乙烷灭菌器_压力蒸汽灭菌器_低温等离子过氧化氢灭菌器 _低温蒸汽甲醛灭菌器_清洗工作站_医用干燥柜_灭菌耗材-环氧乙烷灭菌器_脉动真空压力蒸汽灭菌器_低温等离子灭菌设备_河南省三强医疗器械有限责任公司 | 乐之康护 - 专业护工服务平台,提供医院陪护-居家照护-居家康复 | 二氧化碳/活性炭投加系统,次氯酸钠发生器,紫外线消毒设备|广州新奥 | 薄壁轴承-等截面薄壁轴承生产厂家-洛阳薄壁精密轴承有限公司 | 新能源汽车电池软连接,铜铝复合膜柔性连接,电力母排-容发智能科技(无锡)有限公司 | 干粉砂浆设备_干混砂浆生产线_腻子粉加工设备_石膏抹灰砂浆生产成套设备厂家_干粉混合设备_砂子烘干机--郑州铭将机械设备有限公司 | 闪蒸干燥机-喷雾干燥机-带式干燥机-桨叶干燥机-[常州佳一干燥设备] | 河南卓美创业科技有限公司-河南卓美防雷公司-防雷接地-防雷工程-重庆避雷针-避雷器-防雷检测-避雷带-避雷针-避雷塔、机房防雷、古建筑防雷等-山西防雷公司 | 河南道路标志牌_交通路标牌_交通标志牌厂家-郑州路畅交通 | 安徽合肥项目申报咨询公司_安徽合肥高新企业项目申报_安徽省科技项目申报代理 | 煤矿支护网片_矿用勾花菱形网_缝管式_管缝式锚杆-邯郸市永年区志涛工矿配件有限公司 | 传动滚筒_厂家-淄博海恒机械制造厂 | 苏州伊诺尔拆除公司_专业酒店厂房拆除_商场学校拆除_办公楼房屋拆除_家工装拆除拆旧 | 基本型顶空进样器-全自动热脱附解吸仪价格-AutoHS全模式-成都科林分析技术有限公司 | 工业rfid读写器_RFID工业读写器_工业rfid设备厂商-ANDEAWELL | 章丘丰源机械有限公司 - 三叶罗茨风机,罗茨鼓风机,罗茨风机 | 合肥抖音SEO网站优化-网站建设-网络推广营销公司-百度爱采购-安徽企匠科技 | 大流量卧式砂磨机_强力分散机_双行星双动力混合机_同心双轴搅拌机-莱州市龙跃化工机械有限公司 | 污水/卧式/潜水/钻井/矿用/大型/小型/泥浆泵,价格,参数,型号,厂家 - 安平县鼎千泵业制造厂 |