单例模式改造——传递参数

相同参数不会创建新的实例,不同参数创建实例

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);
	}

}

运行结果
单例模式改造——传递参数_第1张图片

你可能感兴趣的:(设计模式,单例模式,java,开发语言)