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

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

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

瀏覽:51日期: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电影一区| 自拍日韩欧美| 青青久久av| 韩国精品主播一区二区在线观看| 国产aa精品| 婷婷激情一区| 欧美1区免费| 最新亚洲激情| 一区二区三区国产在线| 日韩专区一卡二卡| 午夜亚洲福利| 国产亚洲精品精品国产亚洲综合| 久久精品青草| 亚洲精品一二| 日本麻豆一区二区三区视频| 国产毛片精品| 亚洲不卡系列| 欧美在线资源| 亚洲资源网站| 蜜桃精品视频| 91大神在线观看线路一区| 亚洲一区资源| 精品一区二区三区中文字幕视频| 精品一区二区三区视频在线播放| 国产二区精品| 日韩在线免费| 欧美久久天堂| 群体交乱之放荡娇妻一区二区| 国产午夜精品一区二区三区欧美| 亚洲一区区二区| 国产一区二区三区四区大秀| 99热精品在线观看| 久久一区精品| 综合日韩av| 亚洲精品97| 日本不卡一区二区| 国际精品欧美精品| 激情偷拍久久| 欧美午夜三级| 在线日韩电影| 日韩av午夜在线观看| 精品国产a一区二区三区v免费| 久久免费精品| 午夜一级久久| 国内精品麻豆美女在线播放视频| 久久中文字幕二区| 欧美一级网址| 久久精品成人| 国产亚洲高清在线观看| 久久国产直播| 国产精品手机在线播放| 国产字幕视频一区二区| 日韩精品视频在线看| 国产精品精品| 亚洲综合色婷婷在线观看| 樱桃视频成人在线观看| 免费成人av在线播放| 日本欧美一区二区在线观看| 国产精品久久久久av电视剧| 亚洲欧洲日韩精品在线| www.com.cn成人| 日韩在线黄色| 91精品xxx在线观看| 日韩av一区二区在线影视| 性欧美xxxx免费岛国不卡电影| 日韩中出av| 久久国产中文字幕| 欧美国产精品| 亚洲欧洲美洲国产香蕉| 99久久精品国产亚洲精品| 国产免费av一区二区三区| 自由日本语亚洲人高潮| 欧美精品不卡| 亚洲狼人精品一区二区三区| 日韩欧美国产精品综合嫩v| 欧美一级一区| 亚洲专区欧美专区| 久久久久久久久久久妇女 | 亚洲专区在线| 激情国产在线| 国产日韩欧美三级| 天使萌一区二区三区免费观看| 黄毛片在线观看| 国产日本久久| 中文精品电影| 黑丝美女一区二区| a天堂资源在线| 欧美极品中文字幕| 欧美一区精品| 亚洲免费福利一区| 免费视频最近日韩| 午夜国产一区二区| 日韩三区在线| 精品国产乱码久久久久久1区2匹| 亚久久调教视频| 性色av一区二区怡红| 久久蜜桃精品| 免费高潮视频95在线观看网站| 欧美黄色精品| 91精品丝袜国产高跟在线| 另类国产ts人妖高潮视频| 久久精品国产大片免费观看| 国产不卡人人| 国产在线日韩精品| 老司机精品视频在线播放| 欧美日韩亚洲一区三区| 日本v片在线高清不卡在线观看| 亚洲欧美日韩国产一区二区| av不卡免费看| 久久高清免费观看| 99视频+国产日韩欧美| 午夜久久tv| 亚洲激情黄色| 黄色亚洲免费| 婷婷激情图片久久| 国产99久久| 91精品1区| 另类亚洲自拍| 中文字幕一区二区三区四区久久| 三级一区在线视频先锋| 久久国产精品毛片| 亚洲一区二区日韩| 日韩综合一区二区三区| 欧美亚洲三级| 欧美精品1区| 国产一区二区三区天码| 亚洲免费福利| 91精品精品| 国产亚洲在线| 亚洲理论在线| 日韩高清不卡一区| 国产精品成人自拍| 久久精品三级| 日韩中文在线电影| 亚洲精品99| 综合激情网...| 国产精品一国产精品k频道56| 国产精品蜜月aⅴ在线| 精品香蕉视频| 成人va天堂| 亚洲黄页一区| 综合亚洲视频| 国产精品一区二区三区av| 精品视频自拍| 久久一区二区三区电影| 欧美~级网站不卡| 亚洲开心激情| 麻豆中文一区二区| 99久久亚洲精品蜜臀| 国产亚洲毛片| 欧美精品三级在线| 97在线精品| 一本色道久久精品| 欧美亚洲tv| 色偷偷色偷偷色偷偷在线视频| 激情五月综合网| 日韩欧美三区| 国产精品毛片一区二区在线看| 午夜欧美理论片| 久久激情综合网| 久久精品国产99国产| re久久精品视频| 欧美一区91| 日韩一区二区三区在线免费观看| 久久xxxx| 精品国产一区二区三区噜噜噜| 亚洲韩日在线| 国产亚洲一区| 香蕉国产精品| 国产精品极品在线观看| 欧美一区二区三区高清视频| 日韩高清一区在线| 中文字幕在线高清| 模特精品在线| 精品福利久久久| 夜夜嗨av一区二区三区网站四季av| 久久国内精品自在自线400部| 精品日韩视频| 青草久久视频| 999国产精品视频| 人人爱人人干婷婷丁香亚洲| 久久久亚洲一区| 国产欧美日韩影院| 狠狠干成人综合网| 精品入口麻豆88视频| 噜噜噜久久亚洲精品国产品小说| 精品久久97| 日韩中文av| 久久国产亚洲| 国产精品www.| 欧美日韩视频| 福利片在线一区二区| 免费观看在线综合色| 成人免费一区| 日韩欧美美女在线观看| 久久精品国产亚洲夜色av网站| 国产精品久久久久77777丨|