定义
单例模式:一个类有且仅有一个实例,并且自行实例化向整个系统提供
要点:一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。可以理解为保证一个类只能new一个对象,即只有一个实例,并且提供一个访问该实例的全局访问点
实现方式
单例模式的方式有五种
1、饿汉式单例
构造器私有化、提供一个获取对象的静态方法、类加载时就创建对象
// 饿汉式单例
public class SingletonDemo01 {
// 使用static关键字,类加载时就实例化(立即加载,失去了延时加载的优势),加载类时,天然是线程安全的
private static SingletonDemo01 instance = new SingletonDemo01();
// 私有化构造器,确保类只能在此类中实例化,只能被实例化一次
private SingletonDemo01() {
}
// 提供一个公共的静态方法,让其他类可以获取这个对象,方法没有同步,调用效率高
public static SingletonDemo01 getInstance() {
return instance;
}
}
2、懒汉式单例,和饿汉式进行比较
// 懒汉式单例
public class SingletonDemo02 {
// 类加载时没有实例化对象
private static SingletonDemo02 singletonDemo02;
// 私有化构造器
private SingletonDemo02() {
}
// 可能会有多个线程调用此方法,所以加上了synchronized,避免创建多个对象,相比于饿汉式,调用效率低
public static synchronized SingletonDemo02 getInstance() {
// 只有需要使用这个类的对象时,才回去判断对象是否已经实例化,决定是否实例化对象
if (null == singletonDemo02) {
singletonDemo02 = new SingletonDemo02();
}
return singletonDemo02;
}
}
如有错误,欢迎指正