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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始



单例设计模式:
解决:保证了一个类在内存中只能有一个对象。

比如多程序访问同一个配置文件。希望多程序操作的都是同一个配置文件中的数据。
那么就需要保证该配置文件对象的唯一性。

思路:
怎么做才能保证这个对象是唯一的呢?
        1,其他程序随时用new创建该类对象,无法控制个数。
        结论:不让其他程序创建该类的对象。因为不可以控制。
        2,不让其他程序创建,该类在本类中自己创建一个对象。
        3,该类将创建的对象对外提供,让其他程序获取并使用。


步骤:
        1,怎么实现不让其他程序该类对象呢?
                将该类中的构造函数私有化。
        2,在本类中创建一个本类对象。
        3,定义一个方法,返回值类型是本类类型。让其他程序通过该方法就可以获取到该类对象。




*/
//饿汉式
class Single
{
        private static Single s = new Single();//0x0078
        private Single(){}
        public static Single getInstance()//定义方法是为了可控。
        {               
                return s;
        }
        /**/
}

//懒汉式
//单例的延迟加载方式。
class Single2
{
        private static Single2 s = null;
        private Single2(){}
        public static Single2 getInstance()
        {
                if(s==null)
                        s=new Single2();
                return s;
        }
}
哪个更好点呢,比较一下帮我

点评

警告:刷分行为,后果自负  发表于 2012-7-23 22:50

3 个回复

倒序浏览
饿汉式是线程安全的,在类创建的同时就已经创建好一个静态的对象供系统使用,以后不再改变。
懒汉式如果在创建实例对象时不加上synchronized则会导致对对象的访问不是线程安全的
当然是线程安全的好,所以个人推荐使用第一种
回复 使用道具 举报
那是多线成问题啊,其实懒汉式也是可以的么,用一下双重判断就可以了么
//懒汉式
//单例的延迟加载方式。
class Single2
{
         private static Single2 s = null;
         private Single2(){}
         public static Single2 getInstance()
         {
              if(s==null)
               {
                      synchronized(Single2.class)//类对象作为锁
             {
                 if(s==null)
                         s=new Single2();
                       }
          }
                 return s;
         }
}
回复 使用道具 举报
饿汉式简单、安全,缺点是一加载类就创建了对象,对象的生命周期长些,占用内存时间久些;
懒汉式代码多些,要加锁保证同步,在第一次需要使用时创建对象,稍为节省了一点点内存占用时间。
毕老师建议我们设计时用饿汉式,但面试时常考懒汉式。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马