设计模式--单例模式 (6种实现方式)

所谓单例模式,就是采取一定的方法保证整个软件系统,对某个类只存在一个对象实例,且该类只提供一个取得其对象实例的方法。
  1. 饿汉式单例模式(静态变量)
/**
 * 饿汉式
 * 线程安全
 */
public class Singleton {
  
	private static Singleton instance = new Singleton();
  
	private Singleton(){}
  
	public static Singleton getIntance(){
		return instance;
	}
}
  1. 饿汉式单例模式(静态代码块)
/**
 * 饿汉式
 * 线程安全
 */
public class Singleton {
  
	private static Singleton instance;
	
	static {
		instance = new Singleton();
	}
  
	private Singleton(){}
  
	public static Singleton getIntance(){
		return instance;
	}
}
  1. 懒汉式线程不安全的单例模式:
/**
 * 懒汉式
 * 线程不安全
 */
public class Singleton {
  
	private static Singleton instance;
  
	private Singleton(){}
  
	public static Singleton getIntance(){
		if(instance == null) {
      	instance = new Singleton();
    }
		return instance;
	}
}
  1. 懒汉式线程安全的单例模式:(但由于同步器,每次都要同步,效率低)
/**
 * 懒汉式
 */
public class Singleton {
  
	private static Singleton instance;
  
	private Singleton(){}
  
  /**
   * 加入同步器搞定
   */
	public static synchronized Singleton getIntance(){
		  if(instance == null) {
      	  instance = new Singleton();
      }
		  return instance;
	}
}
  1. (推荐使用)静态内部类的方式实现单例模式(线程安全,懒加载)
// 外部类被装载时,内部类可能不会立刻装载
// getInstance调用时,内部类开始装载
// 装载时是 线程安全 的,所以静态变量只会初始化一次
public class Singleton {
  
	private Singleton(){}

  private static class SingletonInstance {
      private static final Singleton INSTANCE = new Singleton();
  }
  
	public static Singleton getIntance(){
		  return SingletonInstance.INSTANCE;
	}
}
  1. (推荐使用)枚举方式实现单例模式(线程安全,非懒加载,防反序列化)

enum Singleton {
  INSTANCE;
  
  public void sayOK() {
    System.out.println("ok");
  }
}
posted @ 2021-09-30 18:56  明月照江江  阅读(98)  评论(0编辑  收藏  举报