单例模式

来源:互联网 发布:网络电影心机主播 编辑:程序博客网 时间:2024/06/06 03:41

  黑马程序员     

              

               单例设计模式

----------------------                   <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IO开发S</a><a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------

单例设计模式分为饿汉式和懒汉式。主要用于解决对象的唯一性的问题。

  

饿汉式:

     基本思想:

            ①  私有构造方法

            ②  本类中创建自己的对象

            ③  提供一个静态方法,返回本类对象的引用

     具体代码如下:

     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;

      }

}

 

相对而言,饿汉式的安全性和运行效率较高,而懒汉式的相对较低。

以上就是我理解的单例模式了。看见他们应用的比较多,所以分享一下。

---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a><a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------

详细请查看:<ahref="http://edu.csdn.net" target="blank">http://edu.csdn.net</a>

原创粉丝点击