单例模式

来源:互联网 发布:草图大师网络 编辑:程序博客网 时间:2024/06/05 18:29
 

单例模式 的应用场景是: 有的时候只需要在内存中保有该类的一份实例,如资源配置类。

 

 

单例模式要求:

1. 单例类 只有一个 实例

2.构造方法是私有的,这样的话,外部无法new出一个实例

3.单例类必须提供一个别人得到实例的静态方法

4.必须解决多线程下的同步问题

5.分为懒汉式和饿汉式实现方式

 

一:下面先看看懒汉式的实现方法,何为懒汉,就是自己不先主动生成一个实例,而是等到用户使用的时候来判断,判断如果实例还为空,那么就new一个。

 

public class Singleton(){

   public  static Singleton  s = null;

 

  private Singleton(){//构造方法必须为私有,这样外部无法new出实例

  }

 

//提供一个外部获取实例的静态方法,必须为静态的,因为外部new 不出对象,只能通过类来直接调用静态方法。

   public static synchronized Singleton getInstance(){

       if(s == null){

               s = new Singleton();

       }

        return s;

}

}

//synchronize 必须添加。因为懒汉式就是存在多线程的同步问题,我们来看一种情况

   比如  某线程调用 getInstance方法的时候,还没来得及判断你,另外一个线程就进来了,此时2个线程都认为实例为Null,于是各自去new各自的实例,最终就不是单例了

 

二:饿汉式就比较直接了。何为饿汉,就是很饿,一进来就找实例,自己直接动手new了。不用等到实际需要的时候才去new

      public class Singleton(){

      private   static final  Singleton s = new Singleton();

     private Singleton();

 

     public static Singleton getInstance(){

        return s;

   }

 

}

 

}

 

 

饿汉和懒汉的最大区别就是 一个线程安全,一个线程不安全。

原创粉丝点击