相同参数不会创建新的实例,不同参数创建实例
public class Singleton7 {
private static Singleton7 instance = null;
private static int param1;
private static int param2;
public int getParam1() {
return param1;
}
public static Singleton7 getInstance(int param1,int param2) {
instance = new Singleton7.Builder().setParam1(param1).setParam2(param2).buildSingleton();
return instance;
}
private Singleton7(Builder builder) {
this.param1 = builder.param1;
this.param2 = builder.param2;
}
private static class Builder{
private int param1;
private int param2;
public Builder setParam1(int param1) {
this.param1 = param1;
return this;
}
public Builder setParam2(int param2) {
this.param2 = param2;
return this;
}
public Singleton7 buildSingleton() {
if(instance !=null && (this.param1==instance.param1||this.param2==instance.param2)) {
return instance;
}else {
return new Singleton7(this);
}
}
}
}
public class Test {
public static void main(String[] args) {
Singleton7 in1 = Singleton7.getInstance(15, 20);
System.out.println("param1:"+in1.getParam1());
Singleton7 in2 = Singleton7.getInstance(15, 20);
System.out.println("param1:"+in2.getParam1());
System.out.println(in1==in2);
System.out.println("==========================");
Singleton7 in3 = Singleton7.getInstance(25, 30);
System.out.println("param1:"+in3.getParam1());
System.out.println(in1==in3);
}
}
运行结果