分享

5.3.6 利用缓存来实现单例模式

 静听沙漏 2012-03-01

5.3.6 利用缓存来实现单例模式

应用Java缓存的知识,可以变相实现Singleton模式,也算是一个模拟实现吧。每次都先从缓存中取值。只要创建一次对象实例后,就设置了缓存的值,那么下次就不用再创建了。

虽然不是很标准的做法,但是同样可以实现单例模式的功能为了简单,先不去考虑多线程的问题示例代码如下:

  1. /**
  2. * 使用缓存来模拟实现单例
  3. */
  4. public class Singleton {
  5. /**
  6. * 定义一个默认的key值,用来标识在缓存中的存放
  7. */
  8. private final static String DEFAULT_KEY = "One";
  9. /**
  10. * 缓存实例的容器
  11. */
  12. private static Map<String,Singleton> map =
  13. new HashMap<String,Singleton>();
  14. /**
  15. * 私有化构造方法
  16. */
  17. private Singleton(){
  18. //
  19. }
  20. public static Singleton getInstance(){
  21. //先从缓存中获取
  22. Singleton instance = (Singleton)map.get(DEFAULT_KEY);
  23. //如果没有,就新建一个,然后设置回缓存中
  24. if(instance==null){
  25. instance = new Singleton();
  26. map.put(DEFAULT_KEY, instance);
  27. }
  28. //如果有就直接使用
  29. return instance;
  30. }
  31. }

是不是也能实现单例所要求的功能呢?前面讲过,实现模式的方式有很多种,并不是只有模式的参考实现所实现的方式,上面这种也能实现单例所要求的功能,只不过实现比较麻烦,不是太好而已,但在后面扩展单例模式的时候会有用。

另外,前面也讲过,模式是经验的积累,模式的参考实现并不一定是最优的,对于单例模式,后面将会给大家一些更好的实现方式。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多