Builder模式
Builder模式是一种一步一步创建一个复杂对象的设计模式,这种设计模式的精髓就主要有两点:其一,用户使用简单,并且可以在不需要知道内部构建细节的情况下,就可以构建出复杂的对象模型;其二,对于设计者来说,这是一个解耦的过程,这种设计模式可以将构建的过程和具体的表示分离开来。
builder模式的最终目的为创建对象。
Builder模式的使用场景
相同的方法,不同的执行顺序,产生不同的时间结果
多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不同时
产品类非常复杂,或者产品类中的调用顺序不同产生了不同的作用,这个时候用建造者模式非常适合
当初始化一个对象特别复杂,如参数多,且很多参数都具有默认值
Builder模式实现的一般步骤:
1、主类内部定义一个公开的静态内部类,一般使用Builder命名;
2、主类构造方法:传参上面定义的内部静态类对象,属性值传递;
3、静态内部类中提供:内部类定义的属性值即为重写主类属性值,命名一般保持一致,提供setter方法,为实现链式调用,返回其本身;
4、静态内部类: 提供方法用于构造主类的方法, 一般使用build();
例子:
public class Aliyun {
private String appKey;
private String appSecret;
private String bucket;
private String endPoint;
private final String description = "阿里云-OSS";
public static class Builder{
private String appKey;
private String appSecret;
private String bucket;
private String endPoint;
public Builder appKey(String appKey){
this.appKey = appKey;
return this;
}
public Builder appSecret(String appSecret){
this.appSecret = appSecret;
return this;
}
public Builder bucket(String bucket){
this.bucket = bucket;
return this;
}
public Builder endPoint(String endPoint){
this.endPoint = endPoint;
return this;
}
public Aliyun build(){
return new Aliyun(this);
}
}
public static Builder builder(){
return new Aliyun.Builder();
}
private Aliyun(Builder builder){
this.appKey = builder.appKey;
this.appSecret = builder.appSecret;
this.bucket = builder.bucket;
this.endPoint = builder.endPoint;
}
public String getAppKey() {
return appKey;
}
public String getAppSecret() {
return appSecret;
}
public String getBucket() {
return bucket;
}
public String getEndPoint() {
return endPoint;
}
public String getDescription() {
return description;
}
}
如果项目中有使用lombok的话,可以直接使用@Builder注解来实现
例子:
@Builder
@ToString
public class User {
private String name;
private String phone;
private final String country = "中华人民共和国";
}
使用:
@Bean
public Aliyun aliyun(){
return Aliyun.builder()
.appKey(appKey)
.appSecret(appSecret)
.bucket(bucket)
.endPoint(endPoint)
.build();
}