通过缓存实现多例模式

3/8/2017来源:ASP.NET技巧人气:446

下面的实例是通过Map泛型来缓存实现三例

本文只是展示设计模式,对于实例的调度问题不做叙述。

简单的循环返回三例模式的实现‘

import java.util.HashMap;
import java.util.Map;


/**
 * 简单演示如何扩展单例模式,控制实例个数为三
 * @author Administrator
 *
 */
public class OneExtend {
	/**
	 * 定义一个缺省的key值的前缀
	 */
	PRivate final static String DEFAULT_PREKEY = "Cache";
	/**
	 * 缓存实例的容器
	 */
	private static Map<String,Object> map = new HashMap<String,Object>();
	/**
	 * 用来记录当前使用第几个实例
	 */
	private static int num =1;
	/**
	 * 定义控制实例的最大数目
	 */
	private final static int NUM_MAX =  3;
	/**
	 * 构造方法私有化
	 */
	private OneExtend(){

	}
	//获得实例OneExtend对象
	public static OneExtend getInstance(){
		String key = DEFAULT_PREKEY+num;
		OneExtend instance = (OneExtend) map.get(key);
		if(instance==null){
			instance = new OneExtend();
			map.put(key, instance);
		}
		num++;
		if(num>NUM_MAX){
			num = 1;
		}
		return instance;
	}
	/**
	 * 主方法测试
	 * @param args
	 */
	public static void main(String[] args) {
		System.out.println(OneExtend.getInstance());
		System.out.println(OneExtend.getInstance());
		System.out.println(OneExtend.getInstance());
		System.out.println(OneExtend.getInstance());
		System.out.println(OneExtend.getInstance());
		System.out.println(OneExtend.getInstance());
	}
}

运行结果:

singleton.OneExtend@7852e922
singleton.OneExtend@70dea4e
singleton.OneExtend@33909752
singleton.OneExtend@7852e922
singleton.OneExtend@70dea4e
singleton.OneExtend@33909752
注意:这种设计模式同样是线程不安全的,对于如何处理,详细请参看下文

http://blog.csdn.net/QQ_31589695/article/details/60139070