下面的实例是通过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
注意:这种设计模式同样是线程不安全的,对于如何处理,详细请参看下文
https://blog.youkuaiyun.com/qq_31589695/article/details/79939805