デザインモード構成者モード

3155 ワード

簡単に述べる
Buiderモードは、クラスの構築と表現を分離することができる。

http://www.cnblogs.com/cc11001100/p/5939220.html
*    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);
        }
    
    }

}
  • は、builderモード
      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 = newStudent.Builder().name("CC").password("qwerty").sex(" ").address("xxx").build();
    
    というように、パラメータの値をbuilderという内部クラスの方法で規定し、最後にこのようなオブジェクトに戻ると、パラメータの内容がはっきりしているという利点があります。一般的にオブジェクトを作成する時には、甘えてsetメソッドでパラメータの意味は表現しにくいです。(後に複数の方法が挙げられる理由は、各方法が一つのbuilderオブジェクトを返したからです。)