单例模式Singleton某个类只需要一个类实例

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

懒汉式和饿汉式
懒汉式
public class Singleton {
  private static Singleton instance = null;

  private Singleton() {
  }
 
  public static synchronized Singleton getInstance() {
    if(instance == null) {
      instance = new Singleton();
    }
    return instance;
  }
}
饿汉式
public class Singleton {
  private static Singleton instance = new Singleton();

  private Singleton() {
  }
 
  public static Singleton getInstance() {
    return instance;
  }
}
单例模式是用来保证这个类在运行期间只会被创建一个类实例。

这里的单例模式并不适用于集群环境。

懒汉模式体现了延迟加载和缓存的思想。

懒汉式是典型的时间换空间。即每次获取实例都会进行判断。
饿汉式是典型的空间换时间。

不加同步的懒汉式是线程不安全的。
实现线程安全:
1.加上synchronized,但是会降低访问的速度。
2.双重检查加锁。
if(instance == null) {
  synchronized(Singleton.class) {
    if(instance == null) {
      instance = new Singleton();
    }
  }
}

饿汉式是线程安全的。

更好的单例实现方式
public class Singleton {
  private static class SingletonHolder {
    private static Singleton instance = new Singleton();
  }
 
  private Singleton() {
  }

  public static Singleton getInstance() {
    return SingletonHolder.instance;
  }
}

单例模式的本质是控制实例数目。

猜你喜欢

转载自katy1206.iteye.com/blog/2026216