Java设计模式---单例模式

 考于 :

  大话设计模式

  java三百集---高淇

  

  讲在开头:如果需要懒加载,推荐使用静态内部类实现

       如果不需要懒加载,推荐使用枚举  

1.单例模式的概念

  保证一个类仅有一个实例,并提供一个访问它的全局访问点。

  你可能会想,我在创建对象的时候,先判断是不是null,不是null就直接获得,是null就创建实例。

  “生孩子还是不生孩子”应该是夫妻的责任,而不是我的责任。如果按照上面的想法,那么我就需要先判断一下才可以,这样“能不能生”就成了我的责任了哦。

  我们把“生一个孩子”的责任交给类,我们只需要去获得就完事了。

  

 2.第一种实现---饿汉式

  JVM加载类的时候先实例化了

  优点:JVM加载类是线程安全

  缺点:不能懒加载

  

复制代码
package com.dingyu;  /**  * 饿汉式单例模式 ,效率高  * 线程安全,不需要synchronized关键字,但是不能懒加载  * @author dingyu  *  */public class Singleton01 {     private static Singleton01 instance = new Singleton01();      private Singleton01() {              }          public static Singleton01 getSingleton() {         return instance;     } }
复制代码

 3.第二种实现---懒汉式

  调用方法的时候再去创建实例

  优点:懒加载

  缺点:需要同步(不同步,如果线程a,线程b同时调用getSingleton(),相当于new了两次),效率不高

  

复制代码
package com.dingyu; /**  * 懒汉式单例模式  * 优点:懒加载  * 缺点:需要同步  * @author dingyu  *  */public class Singleton02 {     private static Singleton02 instance = null;      private Singleton02() {      }      private static synchronized Singleton02 getSingleton() {         if (instance == null)             instance = new Singleton02();         return instance;     } }
复制代码

 4.第三种实现---双重锁定(尽量别用)

  如果第一次获得就加锁,创建。其他的时候就直接返回就可以。

  优点:效率高,可以懒加载

关键字:
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信