目录
一、单例模式的定义
定义:确保一个类只有一个实例,并提供该实例的全局访问点。
这样做的好处是:有些实例,全局只需要一个就够了,使用单例模式就可以避免一个全局使用的类,频繁的创建与销毁,耗费系统资源。
二、单例模式的设计要素
- 一个私有构造函数 (确保只能单例类自己创建实例)
- 一个私有静态变量 (确保只有一个实例)
- 一个公有静态函数 (给使用者提供调用方法)
简单来说就是,单例类的 构造方法不让其他人修改和使用;并且单例类自己只创建一个实例,这个实例,其他人也无法修改和直接使用;然后单例类提供一个调用方法,想用这个实例,只能调用。这样就确保了全局只创建了一次实例。
三、单例模式的6种实现及各实现的优缺点
(一)懒汉式(线程不安全)
实现:
public class Singleton {
private static Singleton uniqueInstance;
private Singleton() {
}
public static Singleton getUniqueInstance() {
if (uniqueInstance == null) {
uniqueInstance = new Singleton();
}
return uniqueInstance;
}
}
说明:先不创建实例,当第一次被调用时,再创建实例,所以被称为懒汉式。
优点:延迟了实例化,如果不需要使用该类,就不会被实例化,节约了系统资源。
缺点:线程不安全,多线程环境下,如果多个线程同时进入了 if (uniqueInstance == null) ,若此时还未实例化,也就是uniqueInstance == null,那么就会有多个线程执行 uniqueInstance = new Singleton(); ,就会实例化多个实例;
(二)饿汉式(线程安全)
实现:
public class Singleton {
private static Singleton uniqueInstance = new Singleton();
private Singleton() {
}
public static Singleton getUniqueInstance() {
re