构造者(Builder)模式

来源:互联网 发布:免费网络硬盘哪个好 编辑:程序博客网 时间:2024/06/08 19:21

1:创建一个类

public class Student {    private int id;    private String name;    private String passwd;    private String sex;    private String address;    public Student(int id, String name, String passwd, String sex, String address) {        this.id = id;        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 static void main(String[] args) {    Student student = new Student(1, "jacob", "123", "", "fj");}
缺点:当我们的参数很多的时候,我们去创建这个类时,需要去传参,这时就很容易出现,不知道具体传哪个参数,这类问题

2:构造者模式

public class Student {    public int id;    public String name;    public String passwd;    public String sex;    public String address;    //私有化    private Student(){}    //私有化    private Student(Student targer) {        this.id = targer.id;        this.name = targer.name;        this.passwd = targer.passwd;        this.sex = targer.sex;        this.address = targer.address;    }    public static class Builder{        private Student targer;        public Builder() {            targer = new Student();        }        public Builder setId(int id){            targer.id = id;            return this;        }        public Builder setName(String name){            targer.name = name;            return this;        }        public Builder setPasswd(String passwd){            targer.passwd = passwd;            return this;        }        public Builder setSex(String sex){            targer.sex = sex;            return this;        }        public Builder setAddress(String address){            targer.address = address;            return this;        }        public Student build(){            return new Student(targer);        }    }    public int getId() {        return id;    }    public void setId(int id) {        this.id = id;    }    public String getName() {        return name;    }}
当我们去创建这个类时就变成:
public static void main(String[] args) {    Student build = new Builder()            .setId(1)            .setName("jacob")            .setPasswd("123")            .setSex("")            .setAddress("fj")            .build();}

这样我们在创建这个类的时候,就可以清晰的看到我们具体传的是哪一些参数,但是缺点也很明显,比较的冗长