建造者模式

来源:互联网 发布:淘宝客服后台操作 编辑:程序博客网 时间:2024/05/24 02:21

目的是为了解决当构造器所需要的参数过多时,构造器的编写困难

构造器的编写原则

每多一个构造器就多一个参数public builddemo(int param1){}public builddemo(int param1,int param2){}public builddemo(int param1,int param2,int param3){}

但这样编写对构造器的顺序有要求,不能自由选择,bean模式

public builddemo(){}void setParam1();void setParam2();void setParam3();

但这样bean模式线程不安全,而且有时候对set的属性顺序有要求>>建造者模式

public class GirlFriend {    int age;    int sanwei;    String name;    String type;    public GirlFriend(){    }    public GirlFriend(int age,int sanwei){        this.age = age;        this.sanwei = sanwei;    }    public GirlFriend(int sanwei){        this.sanwei = sanwei;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }    public int getSanwei() {        return sanwei;    }    public void setSanwei(int sanwei) {        this.sanwei = sanwei;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getType() {        return type;    }    public void setType(String type) {        this.type = type;    }    //省略....一大堆构造方法    //通过建造者模式,可以在创建该对象出来时,快速指定它的各种属性    public static class Builder{        int age = 18;        int sanwei = 200;        String name = "大桥未久";        String type = "知名女星";        public Builder age(int age){            this.age = age;            return this;        }        public Builder sanwei(int sanwei){            this.sanwei = sanwei;            return this;        }        public Builder name(String name){            this.name = name;            return this;        }        public Builder type(String type){            this.type = type;            return this;        }        public GirlFriend build(){            GirlFriend girlFriend = new GirlFriend();            //根据先前的各种....方法来设置属性            girlFriend.setSanwei(this.sanwei);            girlFriend.setAge(this.age);            girlFriend.setName(name);            girlFriend.setType(this.type);            return girlFriend;        }    }}