日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

构建者模式Builder创建对象

發布時間:2024/5/24 综合教程 37 生活家
生活随笔 收集整理的這篇文章主要介紹了 构建者模式Builder创建对象 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

構建者(Builder)設計模式(又叫生成器設計模式):

當一個類的內部數據過于復雜的時候(通常是負責持有數據的類,比如Config、VO、PO、Entity...),要創建的話可能就需要了解這個類的內部結構,還有這些東西是怎么組織裝配等一大坨亂七八糟的東西,這個時候就會增加學習成本而且會很混亂,這個時候就想啊想一種什么法子來管理一下這個類中的數據呢,怎么在創建的時候讓它按部就班的來,并且代碼可讀性很好別讓我看花了眼啊,我要的東西也能都很好設置進來,這就是Builder模式的應用場景,Builder模式可以將一個類的構建和表示進行分離。

public class Student {

    private int id;
    private String name;
    private String passwd;
    private String sex;
    private String address;

    // 構造器盡量縮小范圍
    private Student() {
    }

    // 構造器盡量縮小范圍
    private Student(Student origin) {
        // 拷貝一份
         this.id = origin.id;
        this.name = origin.name;
        this.passwd = origin.passwd;
        this.sex = origin.sex;
        this.address = origin.address;
    }

    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public String getPasswd() {
        return passwd;
    }

    public String getSex() {
        return sex;
    }

    public String getAddress() {
        return address;
    }

    /**
     * Student的創建完全依靠Student.Builder,使用一種方法鏈的方式來創建
     *
     */
    public static class Builder {

        private Student target;

        public Builder() {
            target = new Student();
        }

        public Builder address(int id) {
            target.id = id;
            return this;
        }

        public Builder name(String name) {
            target.name = name;
            return this;
        }

        public Builder password(String passwd) {
            target.passwd = passwd;
            return this;
        }

        public Builder sex(String sex) {
            target.sex = sex;
            return this;
        }

        public Builder address(String address) {
            target.address = address;
            return this;
        }

        public Student build() {
            return new Student(target);
        }
        
    }

}

Student并不是直接new出來的,對其構造器進行了處理使其可訪問范圍盡可能的小,只讓它通過Student.Builder來構建自己,在Student.Builder中提供了一種類set的方法鏈的方式

來設置值,然后在最后的build()方法的時候會返回一個Student對象,現在要創建一個Student對象,

Student s=new Student.Builder().name("CC").password("qwerty").sex("男").address("銀河系第二旋臂").build();

再對比一下如果不使用構造者模式(一般情況下的用法):

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPasswd() {
        return passwd;
    }

    public void setPasswd(String passwd) {
        this.passwd = passwd;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

}

Student s=new Student("CC","qwerty","男","銀河系第二旋臂");

對比一下進行一個優劣性分析:

一般的套路:優點是比較簡單,開發效率高,缺點是如果參數真的很多的話鬼知道每個對應的是什么意思啊。

Builder模式:優點是可以將構造器的setter方法名取成類似注釋的方式,這樣我們可以很清晰的知道剛才究竟設置的什么值,可讀性較高,缺點是比較冗長。

總結:初步的理解Builder模式解決了要設置的參數過多不好管理的問題

總結

以上是生活随笔為你收集整理的构建者模式Builder创建对象的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。