首页 > 其他 > 详细

单例设计模式的两种方式(饿汉式和懒汉式)

时间:2020-07-10 22:25:57      阅读:58      评论:0      收藏:0      [点我收藏+]

在实际开发中常用到,比如数据库的链接。使用Singleton模式可以节省内存,因为它限制了实例的个数,有利于Java垃圾回收。

单态设计模式创建一个类,应满足:

*为了避免其他程序建立该类对象,先禁止其他程序建立该类对象,即将构造函数私有化

*为了其他程序访问到该类对象,须在本类中创建一个该类私有对象

*为了方便其他程序访问到该类对象,可对外提供一个公共访问方式

Runtime类就是单例设计模式。

单例设计模式的两种方式

           A:饿汉式 当类加载的时候,就创建对象。     

 class Single
           {
                    private Single(){}//将构造函数私有化,不让别的类建立该类对象
                    private static final Single s=new Single();//自己建立一个对象
                    public static Single getInstance()//提供一个公共访问方式
                    {
                             return s;
                    }
           }      

           B:懒汉式 当使用的使用,才去创建对象。

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

           饿汉式和懒汉式的区别:

           (1) 饿汉式是类一加载进内存就创建好了对象;

           (2) 懒汉式则是类才加载进内存的时候,对象还没有存在,只有调用了 getInstance()方法时,对象才开始创建。

           **

           懒汉式是延迟加载,如果多个线程同时操作懒汉式时就有可能出现线程安全问题,解决线程安全问题可以加同步来解决。但是加了同步之后,每一次都要比较锁,效率就 变慢了,所以可以加双重判断来提高程序效率。

           如将上述懒汉式的Instance函数改成同步:

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

 注:开发常用饿汉式,因为饿汉式简单安全。懒汉式多线程的时候易发生问题

单例设计模式的两种方式(饿汉式和懒汉式)

原文:https://www.cnblogs.com/lxxcn/p/13281309.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!