JAVA设计模式(单例模式)

来源:互联网 发布:金山软件成都分公司 编辑:程序博客网 时间:2024/06/04 18:49
  什么是单例
             Singleton(单例)是设计模式中创建型模式的一种,为确保一个类
             最多只有一个实例,并提供一个访问它的全局访问点。
 
        单例特点
                   单例类确保自己只有一个实例(构造函数私有:不被外部实例化,也不被继承)。
                   单例模式必须自己创建自己的实例。
                   单例模式必须为其他对象提供唯一的实例。   
 
       单例应用
                   任务管理器,回收站 ,线程池,配置信息类,管理类,门面类,
                   代理类通常被设计为单例类。如果程序有多个类加载器又同时使
                   用单例模式就要保证单例的唯一性了。
    
        实现方式
          
             饿汉模式           
 


  











饿汉式是线程安全的,在类创建的同时就已经创建好一个静态的对象供系统使用,以后不在改变。

                懒汉模式  
 

 














懒汉式如果在创建实例对象时不加上synchronized则会导致对对象的访问不是线程安全的。

          懒汉模式 (双重锁)
 

 





















双重锁模式,是饱汉模式的优化,进行双重判断,当已经创建过实例对象后就无需加锁,提高效率。 

总结一下,两种方案的构造函数和公用方法都是静态的(static),实例和公用方法又都是私有的(private)。但是饿汉式每次调用的时候不用做创建,直接返回已经创建好的实例。这样虽然节省了时间,但是却占用了空间,实例本身为static的,会一直在内存中带着。懒汉式则是判断,在用的时候才加载,会影响程序的速度。最关键的是,在并发的情况下,懒汉式是不安全的。如果两个线程,我们称它们为线程1和线程2,在同一时间调用getInstance()方法,如果线程1先进入if块,然后线程2进行控制,那么就会有两个实例被创建。

以上就是单例模式常用的几个方法,感谢大家的阅读,我会更加努力给大家带来更精彩的内容。

(责任小编:阿辉)
原创粉丝点击