概述
在平时开发或者开别人源码的时候,都会看到很多的Builder,它把构建的细节完全隐蔽起来,在用户不知道构建细节的情况下把一个对象创建了出来,就很像建房子一样,我们只需要提供材料、工钱和设计图,建设过程全部交由建设工程师做,你完全可以不用知道怎么做,最后一个跟设计图一样的房子就会出现在面前(当然需要时间)。
Builder模式
例子
//房子构建类
public class HourseBuilder {
public double price;
public String design;
public String material;
public String place;
//必须要的参数放在构造函数初始化
public HourseBuilder(String place) {
this.place=place;
}
// 工钱
public HourseBuilder price(double price) {
this.price = price;
return this;
}
// 设计图
public HourseBuilder design(String design) {
this.design = design;
return this;
}
// 材料
public HourseBuilder material(String material) {
this.material = material;
return this;
}
//竣工
public Hoursebuilder(){
return new Hourse(this);
}
}
//房子类
public class Hourse{
private double price;
private String design;
private String material;
private String place;
public Hourse(HourseBuilder builder){
this.price=builder.price;
this.design=builder.design;
this.material=builder.material;
this.place=builder.place;
}
}
//客户端
Hourse hourse=new HourseBuilder("中国")
.price(2000000000)
.design("复式")
.material("材料")
.builder();
以上便是Builder模式的简单使用方法,还可以使用一个专门存放参数的类,将传进来的参数封装在这个类中。
优点:客户端不必知道产品内部的细节,并且构建者之间是独立的,可在构建过程中进行细化。能够将一个复杂对象将构造和表示分离开。
缺点:由于构建过程是隐蔽的,所以有可能造成构建结果跟预想的有偏差。