デザインパターン(13) - ビルダーモード(ビルダー)

ビルダー(Builderのデザインモードと呼ばれる)(ビルダー)デザインパターン:

クラスの内部データ(データクラスは、そのようなコンフィグ、VO、PO、エンティティを保持するため、通常は責任...)複雑すぎる時間になると、あなたは、このクラスの内部構造を理解するために作成する必要があり、これらのものがありますアセンブリおよび他の組織がどのように物事の混乱の大規模な山、これは時間を学習し、非常に混乱することになるのコストを増加させるで、この時間は、作成時に作成する方法、ああ、それのこのクラスのデータを管理するための別の方法をしたいものの種類に望んでいましたそれへのステップバイステップ、と私は、コードの良い可読性が、これはビルダー、ビルダーモデルを構築することができますアプリケーションシナリオのモードとクラスで、私も十分に設定されて何をしたい、ああ話していたことはできません。分離を表します。

例を見てください:

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.Builderによって構築されたアクセス範囲を作るために処理されていない、チェーンの一種でStudent.Builderのクラスセットに方法が提供されます:値を設定し、最終ビルド()メソッドが返すにおける学生のオブジェクト、および次のように今、あなたは、学生オブジェクトを作成したいための方法

...学生S =新Student.Builder()名( "CC")、パスワード( "QWERTY")性別( "M").address( "ミルキー秒スイベルアーム").build();

あなたはコンストラクタモードを使用しない場合は、(通常の使用条件の下で)比較します。

/**
 * 学生实体
 */
public class Student {

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

    public Student() {
    }

    public Student(String name, String passwd, String sex, String address) {
        super();
        this.name = name;
        this.passwd = passwd;
        this.sex = sex;
        this.address = address;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    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("佟丽娅","qwerty","女","银河系第一");

行動分析の長所と短所を比較します。

ビルダーモード:我々は明らかにちょうど正確に設定された高可読性を知ることができますどのような価値利点セッターメソッドコンストラクタは同様にコメントを取ることができ、欠点は、比較的長いです。

一般的なルーチン:引数が本当にたくさんある場合は欠点があり、比較的簡単なことの利点は、高効率の開発は、その後、悪魔は、それが対応する各ああにとって何を意味するか知っています。(行のオプションのすべてと、参加して、コンストラクタ内で渡されます)。

公開された295元の記事 ウォン称賛37 ビュー30000 +

おすすめ

転載: blog.csdn.net/tianshan2010/article/details/104721897