黑马程序员技术交流社区

标题: 浅析SINGTON [打印本页]

作者: 彭小康    时间: 2013-3-5 13:18
标题: 浅析SINGTON
定义一个类,它的构造函数为private的,它有一个static的private的该类变量,在类初始化时实例话,通过一个public的getInstance方法获取对它的引用,继而调用其中的方法。
public class Singleton {
private Singleton(){}
      //在自己内部定义自己一个实例,是不是很奇怪?
      //注意这是private 只供内部调用
      private static Singleton instance = new Singleton();
      //这里提供了一个供外部访问本class的静态方法,可以直接访问  
      public static Singleton getInstance() {
        return instance;   
      }
    }  
如果换一种形式,如何处理
作者: 杨杨    时间: 2013-3-5 15:48
你敲的代码像单例  这样 定义就是 不让外部用这个类的时候用new 因为经常用这个类的对象 new一次就可以了 ,以后可以用静态方法直接返回, 这样可以节省内存
作者: 吴硕    时间: 2013-3-5 20:18
本帖最后由 吴硕 于 2013-3-5 20:19 编辑

你写的恶汉式单例,另外一种形式是懒汉式单例,如下:
  1. /*
  2. 懒汉式最好解决方案
  3. */
  4. public class Singleton
  5. {
  6.         private Singleton() {}

  7.         private static Singleton instance = null;

  8.   public static Singleton getInstance()
  9.         {        
  10.                 //如果为null,就不用再进入同步代码块以提高效率
  11.                 if(instance == null)
  12.                 {
  13.                         //同步代码块,保证多线程环境下也只会产生一个对象
  14.                         synchronized(Singleton.class)
  15.                         {
  16.                                 if(instance == null)
  17.                                 {
  18.                                         instance = new Singleton();
  19.                                 }
  20.                         }
  21.                 }
  22.                 return instance;
  23.         }
  24. }
复制代码





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