學習筆記:設計模式之建造者模式

本文僅供學習交流使用勉躺,侵權必刪。
不作商業(yè)用途,轉載請注明出處

WHAT 什么是建造者

建造者模式(builder)鸳谜,將一個復雜對象的構建與它的表示分離,使得同樣的構建過程可以創(chuàng)建不同的表示式廷。建造者主要用于創(chuàng)建一些復雜的對象咐扭,這些對象內(nèi)部的構建通常是非常復雜的過程。


建造者UML

WHY 為什么使用建造者

  • 如果一個類具有非常多屬性滑废,為了避免構造函數(shù)的參數(shù)列表太長草描,影響可讀性。
  • 建造者的好處是對象的創(chuàng)建代碼和對象本身的代碼解耦策严,調(diào)用者無需關心復雜的構建過程穗慕。提高代碼的易用性
  • 建造者能讓用戶使用到的是一個構造完整的對象,用戶不會調(diào)用到一個未構造完整的對象妻导。

HOW 建造者的實現(xiàn)(JAVA)

場景:創(chuàng)建一個資源配置對象逛绵,內(nèi)部可能存在復雜的構造過程

  • 資源配置類和建造器
package builderDesignPattern;

public class ResourceConfig {
    private String url;
    private String pwd;
    private String user;
    private int coreSize;
    private int maxSize;
    
    private ResourceConfig() {
    }

    public ResourceConfig(String url, String user, String pwd, int coreSize, int maxSize) {
        this.url = url;
        this.user = user;
        this.pwd = pwd;
        this.coreSize = coreSize;
        this.maxSize = maxSize;
    }


    @Override
    public String toString() {
        return "ResourceConfig{" +
                "url='" + url + '\'' +
                ", pwd='" + pwd + '\'' +
                ", user='" + user + '\'' +
                ", coreSize=" + coreSize +
                ", maxSize=" + maxSize +
                '}';
    }

    public static class ResourceConfigBuilder {
        private String url;
        private String pwd;
        private String user;
        private int coreSize;
        private int maxSize;

        public ResourceConfigBuilder setUrl(String url) {
            this.url = url;
            return this;
        }

        public ResourceConfigBuilder setPwd(String pwd) {
            this.pwd = pwd;
            return this;
        }

        public ResourceConfigBuilder setUser(String user) {
            this.user = user;
            return this;
        }

        public ResourceConfigBuilder setCoreSize(int coreSize) {
            this.coreSize = coreSize;
            return this;
        }


        public ResourceConfigBuilder setMaxSize(int maxSize) {
            this.maxSize = maxSize;
            return this;
        }

        public ResourceConfig build() {
            if (isEmpty(url)) {
                throw new IllegalArgumentException();
            }

            if (isEmpty(user)) {
                throw new IllegalArgumentException();
            }

            if (isEmpty(pwd)) {
                throw new IllegalArgumentException();
            }

            if (coreSize > maxSize || coreSize <= Integer.MIN_VALUE) {
                throw new IllegalArgumentException();
            }

            if (coreSize > maxSize || maxSize >= Integer.MAX_VALUE) {
                throw new IllegalArgumentException();
            }

            return new ResourceConfig(url, user, pwd, coreSize, maxSize);
        }

        private boolean isEmpty(String s) {
            return s == null || s.isEmpty();
        }

    }
}

  • 客戶端
public class BuilderClient {
    public static void main(String[] args) {
        String url = "https://www.xxoo.com";
        String user = "admin";
        String pwd = "a123";
        ResourceConfig resourceConfig = new ResourceConfig.ResourceConfigBuilder().setCoreSize(1)
                .setMaxSize(5).setUrl(url).setUser(user).setPwd(pwd).build();
        System.out.println(resourceConfig.toString());
    }
}

持續(xù)更新...

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市倔韭,隨后出現(xiàn)的幾起案子术浪,更是在濱河造成了極大的恐慌,老刑警劉巖寿酌,帶你破解...
    沈念sama閱讀 219,589評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件胰苏,死亡現(xiàn)場離奇詭異,居然都是意外死亡醇疼,警方通過查閱死者的電腦和手機硕并,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評論 3 396
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來秧荆,“玉大人倔毙,你說我怎么就攤上這事∫冶簦” “怎么了陕赃?”我有些...
    開封第一講書人閱讀 165,933評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我么库,道長傻丝,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,976評論 1 295
  • 正文 為了忘掉前任诉儒,我火速辦了婚禮桑滩,結果婚禮上,老公的妹妹穿的比我還像新娘允睹。我一直安慰自己运准,他們只是感情好,可當我...
    茶點故事閱讀 67,999評論 6 393
  • 文/花漫 我一把揭開白布缭受。 她就那樣靜靜地躺著胁澳,像睡著了一般。 火紅的嫁衣襯著肌膚如雪米者。 梳的紋絲不亂的頭發(fā)上韭畸,一...
    開封第一講書人閱讀 51,775評論 1 307
  • 那天,我揣著相機與錄音蔓搞,去河邊找鬼胰丁。 笑死,一個胖子當著我的面吹牛喂分,可吹牛的內(nèi)容都是我干的锦庸。 我是一名探鬼主播,決...
    沈念sama閱讀 40,474評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼蒲祈,長吁一口氣:“原來是場噩夢啊……” “哼甘萧!你這毒婦竟也來了?” 一聲冷哼從身側響起梆掸,我...
    開封第一講書人閱讀 39,359評論 0 276
  • 序言:老撾萬榮一對情侶失蹤扬卷,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后酸钦,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體怪得,經(jīng)...
    沈念sama閱讀 45,854評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,007評論 3 338
  • 正文 我和宋清朗相戀三年卑硫,在試婚紗的時候發(fā)現(xiàn)自己被綠了徒恋。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,146評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡拔恰,死狀恐怖因谎,靈堂內(nèi)的尸體忽然破棺而出基括,到底是詐尸還是另有隱情颜懊,我是刑警寧澤,帶...
    沈念sama閱讀 35,826評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站河爹,受9級特大地震影響匠璧,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜咸这,卻給世界環(huán)境...
    茶點故事閱讀 41,484評論 3 331
  • 文/蒙蒙 一夷恍、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧媳维,春花似錦酿雪、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,029評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至州丹,卻和暖如春醋安,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背墓毒。 一陣腳步聲響...
    開封第一講書人閱讀 33,153評論 1 272
  • 我被黑心中介騙來泰國打工吓揪, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人所计。 一個月前我還...
    沈念sama閱讀 48,420評論 3 373
  • 正文 我出身青樓柠辞,卻偏偏與公主長得像,于是被迫代替她去往敵國和親主胧。 傳聞我的和親對象是個殘疾皇子钾腺,可洞房花燭夜當晚...
    茶點故事閱讀 45,107評論 2 356