最近学习builder模式,写了一个简单例子。废话少说,直接上代码
/**
* @ClassName:BuileExample
* @Description: 建造者模式,适用于构造参数有多个的情况下
*/
public class BuildExample {
private String a;
private String b;
private String c;
public static class Builder implements IBuilder<BuildExample>{
private String a;
private String b;
private String c;
public Builder setA(String a) {
this.a = a;
return this;
}
public Builder setB(String b) {
this.b = b;
return this;
}
public Builder setC(String c) {
this.c = c;
//可以在此处添加参数校验规则,若不符合抛出IllegalArgumentException
return this;
}
public BuildExample build(){
return new BuildExample(this);
}
}
private BuildExample(Builder builder){
this.a = builder.a;
this.b = builder.b;
this.c = builder.c;
}
public static void main(){
BuildExample buildExample = new BuildExample.Builder().setA("a").setB("b").setC("c").build();
}
/**
* @Description: 带有IBuilder实例的方法,利用有限制的通配符类型 来约束构建器的类型参数。
* @param builder
*/
public void builderAssignType(IBuilder<? extends BuildExample> builder){
//
}
}
/**
* 设置了参数的builder生成了一个很好的抽象工厂,注意可以声明BuildExample.Builder来实现Builder<BuildExample>
*/
interface IBuilder<T>{
public T build();
}