建造者模式可以简化创造复杂类的步骤,通过建造者可以直接创造所需的零件并且用零件拼装成复杂类
许多开源项目的初始化都使用了建造者模式,甚至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类