单例模式:生成只存在一个的实例

饿汉模式

public class Singleton {

	/* 在类装载的时候就完成实例化 */
	private static Singleton instance = new Singleton();

	/* 私有构造方法,防止被实例化 */
	private Singleton() {
	}

	/* 获取单例实例 */
	public static Singleton getInstance() {
		return instance;
	}
}

懒汉模式(双重检查)

优点:线程安全;延迟加载;效率较高。

public class Singleton {
	/* 持有私有静态实例,防止被引用,此处赋值为null,目的是实现延迟加载 */
	private static volatile Singleton instance = null;

	/* 私有构造方法,防止被实例化 */
	private Singleton() {
	}

	/* 1:懒汉式,静态工程方法,创建实例 */
	public static Singleton getInstance() {
		if (instance == null) {
			synchronized(Singleton.class) {
				if (instance == null) {
					instance = new Singleton();
				}
			}
		}
		return instance;
	}
}

静态内部类

与饿汉模式实例机制相似,静态内部类方式在Singleton类被装载时并不会立即实例化,而是在需要实例化时,调用getInstance方法,才会装载SingletonInstance类,从而完成Singleton的实例化。

优点:避免了线程不安全,延迟加载,效率高。

public class Singleton {

	/* 私有构造方法,防止被实例化 */
	private Singleton() {
	}

	private static class SingletonInstance {
		private static final Singleton instance = new Singleton();
	}

	/* 获取单例实例 */
	public static Singleton getInstance() {
		return SingletonInstance.instance;
	}
}
posted @ 2023-04-20 11:48  穆海如枫  阅读(36)  评论(0)    收藏  举报