下面的实例是通过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@7852e922singleton.OneExtend@70dea4esingleton.OneExtend@33909752singleton.OneExtend@7852e922singleton.OneExtend@70dea4esingleton.OneExtend@33909752注意:这种设计模式同样是线程不安全的,对于如何处理,详细请参看下文http://blog.csdn.net/QQ_31589695/article/details/60139070
新闻热点
疑难解答