国内最全IT社区平台 联系我们 | 收藏本站
华晨云阿里云优惠2
您当前位置:首页 > php框架 > 框架设计 > 设计模式思考----单例模式

设计模式思考----单例模式

来源:程序员人生   发布时间:2015-07-23 08:24:56 阅读次数:2961次

         单例模式是1种对象创建型模式,使用单例模式,可以保证为1个类只生成唯1的实例对象。也就是说,在全部程序空间中,该类只存在1个实例对象。

      即保证1个类、只有1个实例存在,同时提供1个全局唯1访问这个类的访问点。

      单例模式类图:

              

      在利用系统开发中,我们常常有以下需求:

      -在多个线程之间,比如servlet环境,同享同1个资源或操作同1个对象

      -在全部程序空间使用全局变量,同享资源

      -大范围系统中,为了性能的斟酌,需要节省对象的创建时间等等。

      由于Singleton模式可以保证为1个类只生成唯1的实例对象,所以这些情况,Singleton模式就派上用处了。

                 单例模式的实现有:懒汉式饿汉式两重检查

      懒汉式调用顺序:

        

       饿汉式调用顺序图:

       

         懒汉式是典型的时间换空间,饿汉式是典型的空间换时间。

     不加同步的懒汉式是线程不安全的,实现懒汉式线程安全只需加synhronized便可。

       饿汉式是线程安全的,由于虚拟机保证了只会装载1次。

    “两重检查”就是在getInstance()中减少使用同步。

        第1重检查:其实不是每次进入getInstace方法都要同步,而是先不同步,进入方法 后,先检查实例是不是存在,不存在才进入下面的同步块。

     第2重检查:进入同步块只会再次检查实例是不是存在,不存在就在同步的情况下创建1个实例这是第2重检查。

     这样只需同步1次,从而减少了屡次同步情况下进行判断所浪费的时间

               

            单例模式的本质是控制实例数目,当需要控制1个类的实例只能有1个,而且客户只能从1个全局访问点访问它时可以选用单例模式。


生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠
程序员人生
------分隔线----------------------------
分享到:
------分隔线----------------------------
关闭
程序员人生