日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

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

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

瀏覽:47日期: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
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产一区调教| 日本午夜精品一区二区三区电影| 视频一区欧美精品| 伊人影院久久| 亚洲三级精品| 国产欧美日韩精品一区二区三区| 日本午夜精品视频在线观看| 蜜桃久久久久久| 日韩一区二区三免费高清在线观看 | av一区在线| 少妇久久久久| 一区二区亚洲视频| 国产精品99久久免费观看| 欧美二三四区| 欧美亚洲国产日韩| 久久久免费人体| 亚洲免费影视| 日韩毛片视频| 久久国产欧美日韩精品| 精品国产aⅴ| 99国产精品视频免费观看一公开| 久久福利毛片| 黑森林国产精品av| 日韩中文欧美在线| 久久不见久久见免费视频7 | 四虎4545www国产精品| 成人片免费看| 亚洲免费福利一区| se01亚洲视频 | 影音先锋久久精品| 久久99国产精品视频| 国产高清久久| 精品美女在线视频| 日本不卡视频在线| 精品一区三区| 中文字幕在线视频久| 欧美一区二区三区久久精品| 日韩在线看片| 国产精品久久久久久久久久久久久久久| 欧美精品一二| 亚洲天堂免费电影| 国产精品亚洲欧美日韩一区在线| 久久一区二区三区电影| 欧美国产中文高清| 亚洲免费观看高清完整版在线观| zzzwww在线看片免费| 国产精品网在线观看| 五月激激激综合网色播| 欧美特黄一区| 999国产精品999久久久久久| 精品精品国产三级a∨在线| 日韩av成人高清| 国产一区成人| 蜜桃视频欧美| 国内精品福利| 性感美女一区二区在线观看| 精品久久国产一区| 国产精品黑丝在线播放| 激情黄产视频在线免费观看| av免费不卡国产观看| 国产一区二区视频在线看| 国产精品久久亚洲不卡| 国产免费av国片精品草莓男男| 欧美日韩调教| 久久99蜜桃| 岛国av在线播放| 久久国产欧美| 久久狠狠婷婷| 老司机精品久久| 日韩午夜视频在线| 国产欧美综合一区二区三区| 日本成人手机在线| 婷婷综合电影| 日韩黄色av| 日本精品在线播放| 欧美日韩精品一区二区三区视频 | 麻豆精品蜜桃| 狠狠爱成人网| 91嫩草精品| 成人午夜在线| 91成人精品视频| 91精品高清| 青青青国产精品| 9999国产精品| 亚洲自拍另类| 欧美激情三区| jiujiure精品视频播放| 午夜精品影视国产一区在线麻豆| 欧美日韩a区| 欧美成人基地 | 视频一区二区国产| 国产精品一区二区中文字幕| 神马久久午夜| 亚洲精品在线国产| 国产精品九九| 日韩一区二区久久| 超碰在线99| 久久国产三级| 亚洲专区在线| 午夜精品成人av| 欧美日韩a区| 一本一本久久| 激情视频网站在线播放色| 日韩三级一区| 亚洲一区日韩| 影视先锋久久| 国产精品精品| 国产精品第十页| 亚洲色图网站| 欧美aa一级| 久久久久黄色| 国产精品最新| 在线看片日韩| 亚洲一区二区动漫| 欧美日韩国产综合网| 日韩精品午夜| 日本精品影院| 久久精品国产www456c0m| 成人综合一区| 三上亚洲一区二区| 精品国产黄a∨片高清在线| 日本在线视频一区二区| 亚洲专区视频| 综合精品一区| 日韩视频二区| 久久xxxx精品视频| 蜜桃av一区二区在线观看| 欧美日韩国产欧| 玖玖精品视频| 亚洲欧洲免费| 日韩激情一区二区| 青草av.久久免费一区| 日韩福利视频一区| 久久狠狠亚洲综合| 老司机精品在线| 中文字幕在线视频久| 久久婷婷亚洲| 国产精品毛片在线| 日本不卡的三区四区五区| 亚洲一卡久久| 欧美日韩一区二区三区不卡视频 | 黄色成人在线网址| 亚洲精品成a人ⅴ香蕉片| 日韩欧美美女在线观看| 国产精一区二区| 久久久久国产精品一区二区| 91超碰国产精品| 7777精品| 久久91导航| 日韩在线网址| 中文字幕在线视频网站| 日韩精品一二三四| 国产欧美一区二区三区国产幕精品| 青青草国产成人99久久| 日本免费久久| 日韩影院在线观看| 韩国女主播一区二区三区| 99热精品在线观看| 精品五月天堂| 日韩精品一二三| 国产精品毛片久久| 亚洲在线久久| 欧美亚洲国产精品久久| 欧美日韩精品一区二区三区视频| 国产夫妻在线| 日韩中文字幕在线一区| 亚洲国产欧美日本视频| 色婷婷成人网| а√在线中文在线新版| 日本成人在线视频网站| 午夜国产一区二区| 国产高清不卡| 久久av导航| 91在线成人| 欧美天堂在线| 欧美午夜精彩| 日韩伦理一区| 国产精品1区| 91成人精品在线| 亚洲人成精品久久久| 欧美+亚洲+精品+三区| 在线中文字幕播放| 精品三级在线| 欧美日韩中出| 欧美久久亚洲| 91精品尤物| 国产日产精品_国产精品毛片 | 欧美日韩91| 日本综合视频| 日韩制服丝袜av| 天堂成人免费av电影一区| 精品一区在线| 欧美 日韩 国产精品免费观看| 肉色欧美久久久久久久免费看| 日韩综合一区| 久久久成人网| 欧美成人高清| 亚洲综合不卡| 色综合视频一区二区三区日韩 | 蜜臀国产一区|