5.3.6 利用缓存来实现单例模式
应用Java缓存的知识,可以变相实现Singleton模式,也算是一个模拟实现吧。每次都先从缓存中取值。只要创建一次对象实例后,就设置了缓存的值,那么下次就不用再创建了。
虽然不是很标准的做法,但是同样可以实现单例模式的功能为了简单,先不去考虑多线程的问题示例代码如下: - /**
- * 使用缓存来模拟实现单例
- */
- public class Singleton {
- /**
- * 定义一个默认的key值,用来标识在缓存中的存放
- */
- private final static String DEFAULT_KEY = "One";
- /**
- * 缓存实例的容器
- */
- private static Map<String,Singleton> map =
- new HashMap<String,Singleton>();
- /**
- * 私有化构造方法
- */
- private Singleton(){
- //
- }
- public static Singleton getInstance(){
- //先从缓存中获取
- Singleton instance = (Singleton)map.get(DEFAULT_KEY);
- //如果没有,就新建一个,然后设置回缓存中
- if(instance==null){
- instance = new Singleton();
- map.put(DEFAULT_KEY, instance);
- }
- //如果有就直接使用
- return instance;
- }
- }
是不是也能实现单例所要求的功能呢?前面讲过,实现模式的方式有很多种,并不是只有模式的参考实现所实现的方式,上面这种也能实现单例所要求的功能,只不过实现比较麻烦,不是太好而已,但在后面扩展单例模式的时候会有用。
另外,前面也讲过,模式是经验的积累,模式的参考实现并不一定是最优的,对于单例模式,后面将会给大家一些更好的实现方式。
|