黑马程序员技术交流社区

标题: 单例模式的几个问题 [打印本页]

作者: 一步一脚印    时间: 2013-11-14 23:12
标题: 单例模式的几个问题
1.我们平时使用单例的话,如果对象长时间不用,jvm会怎么处理呢?是被垃圾收集器收集还是?
还是有类似session的解决办法,30分钟消灭?

2.采用内部类实现的单例和我们平时写的性能上会更好吗还是没区别的?有没有大神分析一下?不胜感激。
  1. public class Singleton {
  2.         private Singleton() { }
  3.         private static class SingletonHolder {
  4.                 public static final Singleton INSTANCE = new Singleton();
  5.           }

  6.      public static Singleton getInstance() {
  7.                   return SingletonHolder.INSTANCE;
  8.            }
  9. }
复制代码

单例模式.jpg (16.44 KB, 下载次数: 13)

单例模式.jpg

作者: 零下五度的水    时间: 2013-11-14 23:43
1.好高深的问题。。。目测。。。不会。。。
2.单例跟内部类有什么关系。。
   单例主要是为了防止建立多个实例,有需求的时候才会用到,
   至于性能怎么样,应该是看你的技术吧,
   毕竟如果没事就new个对象玩,那性能肯定不如单例
   不过如果就new一个对象用一会扔了再也不用了,那性能必然比单例高
作者: 不抛弃不放弃    时间: 2013-11-15 00:04
第一个问题: 单例只是个设计模式   他也是个类   当对象不再被使用了的话  也会被GC收回,
第二个问题:首先内部类  就是一个外部类的成员   如果你把他定义成单例的 并不是不可以 ,只是因情况而定,区别肯定是  意义不同啊, 我们平常定义的 ,是所有的类都能访问和调用单例模式的类,  而你把内部类定义成单例模式了而已 ,不同的概念吧,内部类肯定有局限性啊  病不是你定义成单例模式了 他就不是内部类了 ,他依然要遵循内部类的使用规则啊。
   一点想法,楼下跟上
作者: 起猿    时间: 2013-11-15 00:19
概要

单例模式是最简单的设计模式之一,但是对于Java的开发者来说,它却有很多缺陷。在本月的专栏中,David Geary探讨了单例模式以及在面对多线程(multithreading)、类装载器(classloaders)和序列化(serialization)时如何处理这些缺陷。


单例模式适合于一个类只有一个实例的情况,比如窗口管理器,打印缓冲池和文件系统,它们都是原型的例子。典型的情况是,那些对象的类型被遍及一个软件系统的不同对象访问,因此需要一个全局的访问指针,这便是众所周知的单例模式的应用。当然这只有在你确信你不再需要任何多于一个的实例的情况下。

单例模式的用意在于前一段中所关心的。通过单例模式你可以:



确保一个类只有一个实例被建立

提供了一个对对象的全局访问指针

在不影响单例类的客户端的情况下允许将来有多个实例


尽管单例设计模式如在下面的图中的所显示的一样是最简单的设计模式,但对于粗心的Java开发者来说却呈现出许多缺陷。这篇文章讨论了单例模式并揭示了那些缺陷。

注意:你可以从
Resources
下载这篇文章的源代码。


单例模式


在《设计模式》一书中,作者这样来叙述单例模式的:确保一个类只有一个实例并提供一个对它的全局访问指针。

下图说明了单例模式的类图。

(图1)


单例模式的类图


正如你在上图中所看到的,这不是单例模式的完整部分。此图中单例类保持了一个对唯一的单例实例的静态引用,并且会从静态getInstance()方法中返回对那个实例的引用。

作者: FFF    时间: 2013-11-15 09:30
{:soso_e149:}那么复杂的问题。真心不懂啊。一步和起源你们两个好厉害~(不明白你们在说什么,所以觉得很厉害!)
作者: 一步一脚印    时间: 2013-11-15 09:37
FFF 发表于 2013-11-15 09:30
那么复杂的问题。真心不懂啊。一步和起源你们两个好厉害~(不明白你们在说什么,所以觉得很厉 ...

哈哈,我还想问,反射机制和单例的问题。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2