多例模式

  • Post author:
  • Post category:其他


多例模式有两种,一种是

指定上限

的多例,另一种是不设上限(这种和随时随地new没什么区别,不做讨论),我们通常说的多例指的是第一种,这种模式比较简单,说白了就是在单例基础上多new几个出来,然后提供两个获取对象的方法,一个随机获取,一个定点获取。代码如下:

/**
 * @desc 多例模式
 * @date 2020年9月6日下午3:14:42
 * @author liujl
 */
public class MoreInstance {
	
	/**
	 * 定义多例的上限
	 */
	private static final Integer COUNT= 3; 
	
	private static final List<MoreInstance> INSTANCES = new ArrayList<>(COUNT);
	
	static {
		for (int i = 0; i < COUNT; i++) {
			INSTANCES.add(new MoreInstance());
		}
	}
	
	public static MoreInstance getTargetInstance() {
		Random r = new Random();
		int index = r.nextInt(COUNT);
		return INSTANCES.get(index);
	}
	
	/**
	 * 获取特定实例
	 * @param targetIndex
	 * @return
	 */
	public static MoreInstance getTargetInstance(int targetIndex) {
		return INSTANCES.get(targetIndex);
	}
	
	private MoreInstance() {}
	
	public static void main(String[] args) {
		for (int i = 0; i < 1000; i++) {
			new Thread(() -> System.out.println("1---" + MoreInstance.getTargetInstance(0).hashCode())).start();
			new Thread(() -> System.out.println("2---" + MoreInstance.getTargetInstance(0).hashCode())).start();
			new Thread(() -> System.out.println("3---" + MoreInstance.getTargetInstance().hashCode())).start();
		}
	}

}



版权声明:本文为jinyouxinzao原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。