「Patternを設計」ビルダーモード


ビルダーモード

  • アレイ
  • の作成

  • 個別のBuilderクラスを作成し、値を入力した後にインスタンスを返します.

  • 各パラメータを受け入れ、すべてのパラメータを受け入れ、これらのパラメータを組み合わせて使用するアレイ.
  • こうぞう



    インプリメンテーション

    public class Member {
        private final int id;
        private final String password;
        private final String name;
        private final int age;
        private final String email;
        private final String phone;
    
        public static class Builder {
            // Required parameters(필수 인자)
            private final int id;
    
            // Optional parameters - initialized to default values(선택적 인자는 기본값으로 초기화)
            private String password = "";
            private String name = "";
            private int age = 0;
            private String email = "";
            private String phone = "";
    
            public Builder(int id) {
                this.id = id;
            }
    
            public Builder password(String password) {
                password = password;
                return this;    // 이렇게 하면 . 으로 체인을 이어갈 수 있다.
            }
            public Builder name(String name) {
                name = name;
                return this;
            }
            public Builder age(int age) {
                age = age;
                return this;
            }
            public Builder email(String email) {
                email = email;
                return this;
            }
            public Builder phone(String phone) {
                phone = phone;
                return this;
            }
            public Member build() {
                return new Member(this);
            }
        }
    
        private Member(Builder builder) {
            id = builder.id;
            password = builder.password;
            name = builder.name;
            age = builder.age;
            email = builder.email;
            phone = builder.phone;
        }
    }
  • 外部または内部でBuilderクラスを実装し、このビルダーを介してパラメータ値を渡し、最後のビルダー()メソッドを呼び出してインスタンスを返す.
  • 前の
  • に示すように、次のように呼び出すことができる.
  •   Member member = new Member.Builder(1)
                    .name("name")
                    .age(27)
                    .build();

    リファレンス

    @Getter
    @Builder
    public class Member {
        private final int id;
        private final String password;
        private final String name;
        private final int age;
        private final String email;
        private final String phone;
        ...
  • lombokを使用して、@Builderだけでモードを実現できます...!
  • メリットとデメリット

  • の利点
  • の各因子がどういう意味か分かりやすい.
  • は、必要に応じてsetterメソッドを実装せずに、変更不可能なオブジェクトを作成することができる.
  • 一度に作成されたオブジェクト
  • は、オブジェクトの一貫性を破壊しません.
  • build()関数に入力した値が無効かどうかを検証させることもできます.
  • の欠点
  • APIでは、時間が経つにつれてパラメータが増加するため、コードがより大きくなる可能性があります.
  • の不適切な使用は、パフォーマンスの低下を招く可能性があります.
  •  コンストラクタモードについては,GoF設計モードのコンストラクタモードとEffective Javaのコンストラクタモードとの間の概念の衝突が様々な意見を生んでいることが分かる.
     仕事ではEffective Javaで記述されている概念を使用していますが、後でそれぞれ学習して追加する他の概念もあります.
    関連項目:
  • ビルダアレイ
  • Javaビルダーモードのメリットとデメリット
  • ビルダアレイ