成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

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

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

瀏覽:6日期: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
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
亚洲欧美一区二区三区久本道91| 99热这里只有精品8| 激情成人亚洲| 精品日韩av一区二区| 精品影院一区二区久久久| 色网站国产精品| 天天av天天翘天天综合网色鬼国产| 国产精品久久久亚洲一区| 亚洲欧美日韩国产综合在线| 在线播放一区| 亚洲精品中文在线观看| 亚洲精品孕妇| 亚洲永久免费视频| 亚洲欧美日韩在线观看a三区 | 日韩中文字幕91| 色婷婷久久久亚洲一区二区三区 | 亚洲第一久久影院| 久久成人免费| 日日夜夜免费精品| 欧美三级在线看| 国产在线观看免费一区| 欧美一区二区观看视频| 成人一级视频在线观看| 久久久久久99精品| 亚洲性图久久| 夜夜嗨av一区二区三区网页| 在线视频国内自拍亚洲视频| 亚洲一区二区三区影院| 色菇凉天天综合网| 国产一区久久久| 精品精品国产高清a毛片牛牛| 97精品视频在线观看自产线路二| 国产欧美中文在线| 亚洲黄色在线| 日韩精品一二区| 7777精品伊人久久久大香线蕉完整版 | 色噜噜狠狠一区二区三区果冻| 日韩成人免费看| 精品动漫一区二区三区在线观看| 久久精品国产一区二区| 欧美一区二区在线播放| av亚洲精华国产精华精华| 国产三级欧美三级日产三级99| 午夜国产精品视频| 亚洲精品成人在线| 欧美在线播放高清精品| 国产黄色91视频| 国产欧美日韩麻豆91| 亚洲狼人精品一区二区三区| 亚洲一级不卡视频| 在线免费观看日本欧美| 国产91色综合久久免费分享| 欧美精彩视频一区二区三区| 一区二区国产精品| 久久国产福利国产秒拍| www国产精品av| 正在播放亚洲| 狠狠网亚洲精品| 国产精品天干天干在观线| 国产精品欧美久久| 国内精品久久久久影院一蜜桃| 精品国产一区二区三区四区四 | 国精品一区二区| 日日夜夜精品免费视频| 欧美电影免费观看完整版| 精品99视频| 精品中文字幕一区二区| 欧美激情一区在线| 久久久www| 成人高清伦理免费影院在线观看| ㊣最新国产の精品bt伙计久久| 日本韩国一区二区| 97se亚洲国产综合自在线| 亚洲在线观看免费| 日韩欧美国产高清| 99国产精品久久久久久久| 麻豆成人91精品二区三区| 久久精品欧美一区二区三区不卡 | 欧美性大战久久| 午夜精品久久| 奇米亚洲午夜久久精品| 久久亚洲私人国产精品va媚药| 国产精品一二| 成人免费毛片a| 亚洲一区二区三区视频在线播放| 欧美一级精品在线| 9国产精品视频| 亚洲成a人片在线观看中文| 91精品国产丝袜白色高跟鞋| 韩国亚洲精品| 激情综合亚洲精品| 亚洲色图在线看| 日韩欧美久久一区| 亚洲一区二区三区午夜| 成人动漫中文字幕| 婷婷综合五月天| 国产精品区一区二区三区| 欧美三区在线观看| 在线播放豆国产99亚洲| 国产盗摄精品一区二区三区在线| 亚洲精品视频一区| 精品美女在线观看| 91久久精品一区二区三区| 欧美色123| 国产精品香蕉一区二区三区| 尤物av一区二区| 久久久久久免费网| 欧美日韩黄视频| 亚洲影院免费| 欧美视频亚洲视频| 国产91在线观看| 日韩专区一卡二卡| 亚洲成在人线免费| 国产精品情趣视频| 欧美α欧美αv大片| 欧美专区在线观看一区| 91久久精品国产91久久性色tv| 成人一区在线观看| 蜜桃视频一区二区| 亚洲一卡二卡三卡四卡无卡久久| 国产色综合一区| 日韩精品自拍偷拍| 欧美日韩一区二区在线视频| 国产精品一区在线播放| 黄色欧美日韩| aaa亚洲精品一二三区| 激情综合网最新| 天天免费综合色| 亚洲精品国产精品乱码不99| 国产欧美一区二区精品性色超碰 | 精品理论电影在线| 欧美又粗又大又爽| 免费视频久久| 尤物精品在线| 色综合天天综合给合国产| 国产精品456| 九九精品一区二区| 青青草97国产精品免费观看无弹窗版| 最好看的中文字幕久久| 国产三级精品三级| 欧美变态tickling挠脚心| 欧美伦理影视网| 欧美综合亚洲图片综合区| 久久国产日韩| 中文欧美日韩| 在线免费观看欧美| 红桃视频国产精品| 97久久久精品综合88久久| 国产精品一级黄| 精品一区二区三区免费毛片爱| 日本在线不卡视频| 日韩成人午夜精品| 天堂久久一区二区三区| 亚洲风情在线资源站| 亚洲伊人观看| 先锋影音久久久| 亚洲欧美卡通另类91av| 国产精品日本| 国产欧美二区| 国产久一道中文一区| 国产精品欧美久久| 国产女主播一区二区三区| 国产亚洲激情| 国产精品久久久久久模特 | 亚洲精品免费电影| 18涩涩午夜精品.www| 国产精品女人毛片| 国产精品乱码一区二三区小蝌蚪| 国产欧美精品一区二区三区四区| 国产人成一区二区三区影院| 久久久久久9999| 中文字幕精品一区| 日韩理论片一区二区| 亚洲人成精品久久久久| 亚洲精品国产一区二区精华液| 一个色综合av| 视频一区中文字幕国产| 青青草原综合久久大伊人精品优势| 麻豆精品视频在线观看视频| 九九九精品视频| 国产高清精品网站| 成人午夜短视频| 91美女片黄在线| 国产综合激情| 一区二区高清| 久久av在线| 欧美日韩中文字幕一区| 日韩一区二区三区在线视频| 2020国产精品久久精品美国| 亚洲国产精品成人综合| 亚洲少妇屁股交4| 五月天激情综合| 九九九精品视频| 成人久久视频在线观看| 91老师片黄在线观看| 亚洲丰满在线| 色一情一伦一子一伦一区| 欧美浪妇xxxx高跟鞋交| 久久综合成人精品亚洲另类欧美| 国产精品每日更新|