天天看点

GOF 23 之创造模式 --- 建造者模式

建造者模式可以简化创造复杂类的步骤,通过建造者可以直接创造所需的零件并且用零件拼装成复杂类

许多开源项目的初始化都使用了建造者模式,甚至jdk的stringbuilder也使用了它(append后返回的还是本身,可以继续append)。

接下来看一下需要构建的person类,name和sex作为类来展示是为了使person类更复杂。

package Builder;


/*
* 创造此类需要两个 属性然后组装成一个person类
* */
class Person {
    private Name name;
    private Sex sex;

    Person(){

    }

    Person(Name name, Sex sex) {
        this.name = name;
        this.sex = sex;
    }

    public Name getName() {
        return name;
    }

    public void setName(Name name) {
        this.name = name;
    }

    public Sex getSex() {
        return sex;
    }

    public void setSex(Sex sex) {
        this.sex = sex;
    }
}

class Name{
    private String name;
    Name(String name){
        this.name = name;
    }
}

class Sex{
    private String sex;
    Sex(String sex){
        this.sex = sex;
    }
}
           

然后是主角,建造者

package Builder;


class Builder {

    private Person person;
    private Name personName;
    private Sex personSex;

    private Builder(){

    }
    static Builder build(){
        return new Builder();
    }
    Builder name(String name){
        personName = new Name(name);
        return this;
    }
    Builder sex(String sex){
        personSex = new Sex(sex);
        return this;
    }

    Person create(){
        return new Person(personName,personSex);
    }

}
           

调用的时候直接

Person person = Builder.build().name("张三").sex("女").create();
           

可见,调用者根本不需要知道name类和sex类,只需要提供一些信息就可以创建出person类