- 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
(1)Build模式创建实例
- 定义一个静态内部类Builder,内部的成员变量和外部类一样。
- Builder类通过一系列的方法用于成员变量的赋值,并返回当前对象本身。
- Builder类提供一个外部类的创建方法build,该方法内部调用了外部类的一个私有构造函数,入参就是内部类Builder
- 外部类提供一个私有构造函数供内部类调用,在该构造函数中完成成员变量的赋值,取值为Builder对象中对应的成变量的值
public class Person {
private int age;
private boolean sex;
private String name;
private Person(Builder builder) {
this.age = builder.age;
this.sex = builder.sex;
this.name = builder.name;
}
public int getAge() {
return age;
}
public boolean isSex() {
return sex;
}
public String getName() {
return name;
}
//创建建造者
public static class Builder {
private int age;
private boolean sex;
private String name;
public Builder setAge(int age) {
this.age = age;
return this;
}
public Builder setSex(boolean sex) {
this.sex = sex;
return this;
}
public Builder setName(String name) {
this.name = name;
return this;
}
public Person build() {
return new Person(this);
}
}
}
- 代码调用
Person person = new Person.Builder().setName("小高").build();
- 封装性良好,将配置从目标类中隔离出来,避免作为过多的set方法,并且隐藏内部构建细节
- Builder模式比较常见的实现形式是通过链式调用,使得代码更加简洁、易懂。
- 易于扩展,具体的建造者类之间相互独立,增加新的具体建造者无需修改原有类库的代码。
- 内部类与外部类相互引用,可能会导致内存消耗比较大。
网友评论