Skip to content

Latest commit

 

History

History
107 lines (78 loc) · 1.7 KB

单例模式的四种实现方式.md

File metadata and controls

107 lines (78 loc) · 1.7 KB

单例模式的四种实现方式

原本单纯的我一直认为这世界上的单例模式,只有饿汉和懒汉呢,今天发现了,原来单例模式有四种实现方式。

饿汉模式

public class Singleton {
	/**
	 * 饿汉式
	 */
	private Singleton() {

	}
	
	private static final Singleton SINGLETON = new Singleton();
	
	public static Singleton getInstance(){
		return SINGLETON;
	}
	
	public void system(){
		System.out.println("---lin---> singleton");
	}
	
}

懒汉模式

public class Singleton2 {
	/**
	 * 懒汉式
	 */
	private Singleton2() {

	}

	private static Singleton2 singleton2 = null;

	public static Singleton2 getInstance() {
		if (singleton2 == null) {
			synchronized (Singleton.class) {
				if (singleton2 == null) {
					singleton2 = new Singleton2();
				}
			}
		}
		return singleton2;
	}

	public void system(){
		System.out.println("---lin---> singleton2");
	}
}

枚举模式

public enum Singleton3 {
	INSTANCE;
	private Singleton3(){
		
	}
	
	public void system(){
		System.out.println("---lin---> singleton3");
	}
}

Holder模式

public class Singleton4 {
	/**
	 * 带有Holder的方式
	 * 类级内部类,也就是静态的成员内部类,该内部类的实例与外部类的实例没有绑定关系
	 * 只有被调用的时候才会装在,从而实现了延迟加载
	 */
	private Singleton4() {

	}

	private static class SingletonHolder {
		/**
		 * 静态初始化器,由JVM来保证线程安全
		 */
		public static final Singleton4 INSTANCE = new Singleton4();
	}

	public static Singleton4 getInstance() {
		return SingletonHolder.INSTANCE;
	}

	public void system() {
		System.out.println("---lin---> singleton4");
	}
}