构造器的优化
在初始化类的过程中,一般采用的是 new ClassName();去初始化对象,当该类所带有的属性和特征比较多时,用户也可以提供带有不同参数的构造方法,可是当参数过多且存在必要参数和选中参数的时候,提供大量的构造方法就回显得臃肿且意思不明确。
在此时呢可以采用构建器的思路去处理当前的对象,构建器的思路是在类的内部提供一个内部类,且内部类提供一个包括必须参数的构造方法,还有包可能用到的set参数的方法,还需要提供一个对外开放得到外部类实例的方法。
大体的思路说完了,直接上代码。
主要类`
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
*
* @author zhaozx
*builder模式的构造方法
*最后采用build方法得到想要的对象
*/
public class TestBuilderMode {
private final int param1;
private final int param2;
private final int param3;
private final int param4;
private final int param5;
private final int param6;
private final int param7;
private final int param8;
public static class Builder{
//设置必须要的参数
private final int param1;
private final int param2;
//设置可选的参数
private int param3 = 0;
private int param4 = 0;
private int param5 = 0;
private int param6 = 0;
private int param7 = 0;
private int param8 = 0;
//设置必须参数的构造器
public Builder(int param1,int param2){
this.param1 = param1;
this.param2 = param2;
}
public Builder param3(int param3){
this.param3 = param3;
return this;
}
public Builder param4(int param4){
this.param4 = param4;
return this;
}
public Builder param5(int param5){
this.param5 = param5;
return this;
}
public Builder param6(int param6){
this.param6 = param6;
return this;
}
public Builder param7(int param7){
this.param7 = param7;
return this;
}
public Builder param8(int param8){
this.param8 = param8;
return this;
}
public TestBuilderMode build(){
return new TestBuilderMode(this);
}
}
private TestBuilderMode(Builder build){
param1 = build.param1;
param2 = build.param2;
param3 = build.param3;
param4 = build.param4;
param5 = build.param5;
param6 = build.param6;
param7 = build.param7;
param8 = build.param8;
}
}`
测试类
public class UseBuilder {
/**
* @param args
* 使用builder模式的构造方法,在参数多而且可变的情况下使用。
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
TestBuilderMode builderMode = new TestBuilderMode.Builder(10, 20).param3(30).build();
}
}
用户可以在需要的时候直接以.param()的方式进行对对象的参数进行赋值,方便且直观