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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈春 中级黑马   /  2013-7-30 20:36  /  1170 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文



                                               单例设计模式
单例设计模式分为饿汉式和懒汉式。主要用于解决对象的唯一性的问题。
  
饿汉式:
     基本思想:
            ①  私有构造方法
            ②  本类中创建自己的对象
            ③  提供一个静态方法,返回本类对象的引用
     具体代码如下:
     class Single
             {
                      private Single(){}
       
                      private static Single s = new Single();

                      public static Single getInstance()
                  {
                          return s;
                      }
       
             }



相对而言,懒汉式要麻烦许多。要考虑到线程的安全问题。而传说中的面试,貌似偏偏就喜欢复杂的。

懒汉式:
     基本思想:
              ① 私有构造方法
              ② 创建引用型变量,但是,不创建对象
              ③ 提供公共的静态的方法,先要判断对象是否为空。但是,这里就涉及到一个线程安全问题。假如线程A判断完对象为空。它本应该创建对象,然而就在此时,CPU去执行其他的任务。线程A就停在这里。当线程B来执行这里的时候,它也要判断一下,假如同样的事情又发生了。就会有两个线程卡在哪里。当CPU再一次回来执行线程A的时候,它已经判断完了,程序往下执行,创建对象。然后,线程B回来继续执行的时候,因为它也已经判断过了。那么它也创建一个对象。于是,问题也就出现了,这样便不能保证对象的唯一性。那么,我们就必须在判断完后再加上一把锁。每一次程序进去的时候先判断,再进去拿到对象锁,再创建。哪没有拿到锁的线程,它就不能进去执行。更不能创建对象。

具体代码如下:


class Single
{
        private static Single s = null;
        private Single(){}
         
        public static Single getInstance()
        {
                if(s==null)
                {
                        synchronized(Single.class)
                        {
                                if(s==null)
                                {
                                        s = new Single();
                                }
                        }
                }
        return s;       
        }
}

相对而言,饿汉式的安全性和运行效率较高,而懒汉式的相对较低。
以上就是我理解的单例模式了。看见他们应用的比较多,所以分享一下。

2 个回复

倒序浏览
恩 我也看到这里了
   共同学习!{:soso_e100:}
回复 使用道具 举报
单例模式的构造方法也可以是protected的,。。。。这样程序扩展性好。。。自己查资料学吧!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马