A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 彭小康 中级黑马   /  2013-3-5 13:18  /  992 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

定义一个类,它的构造函数为private的,它有一个static的private的该类变量,在类初始化时实例话,通过一个public的getInstance方法获取对它的引用,继而调用其中的方法。
public class Singleton {
private Singleton(){}
      //在自己内部定义自己一个实例,是不是很奇怪?
      //注意这是private 只供内部调用
      private static Singleton instance = new Singleton();
      //这里提供了一个供外部访问本class的静态方法,可以直接访问  
      public static Singleton getInstance() {
        return instance;   
      }
    }  
如果换一种形式,如何处理

评分

参与人数 1黑马币 +9 收起 理由
张庚 + 9

查看全部评分

2 个回复

倒序浏览
你敲的代码像单例  这样 定义就是 不让外部用这个类的时候用new 因为经常用这个类的对象 new一次就可以了 ,以后可以用静态方法直接返回, 这样可以节省内存
回复 使用道具 举报
本帖最后由 吴硕 于 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. }
复制代码

评分

参与人数 1黑马币 +9 收起 理由
张庚 + 9

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马