单例设计模式
单例设计模式呢就是在程序运行当中,无论怎么创建该对象,该对象有且只有一个存在。
单例设计模式分为两种
1.饿汉式单例
2.懒汉式单例
首先我们来看看饿汉式单例
饿汉式单例
(在类加载时就完成了初始化,所以类加载较慢,但获取对象的速度快)
// 饿汉式单例
class EagerSingleton{
// 1.构造方法私有化
private EagerSingleton(){
}
// 2.自己创建对象
private static EagerSingleton eagerSingleton = new EagerSingleton();
// 3.开放一个方法让外界能拿到对象 因为外界不能创建对象,所以要用静态方法
public static EagerSingleton getInstance() {
return eagerSingleton;
}
}
懒汉式单例
(类加载时不初始化)
// 不完整的懒汉式单例(出现线程问题)
class LazySingleton{
// 1.构造方法私有化
private LazySingleton(){
}
// 2.声明一个本类对象的引用
private static LazySingleton lazySingleton = null;
// 3.开放访问的方法
public static LazySingleton getInstance() {
// 判断
if (lazySingleton == null) {
// 创建对象
lazySingleton = new LazySingleton();
}
return lazySingleton;
}
}
线程问题呢 目前还没有进一步学习,可以先参考 [ 懒汉式单例线程问题 ]
进过上面的代码相比大家也能看出懒汉式和饿汉式的区别了吧。
那就是创建单例对象的时机不同。
饿汉式单例 不管你使不使用开放的方法,都会将这个单例对象创建出来。
懒汉式单例(需要加双锁) 只有你第一次调用开放的方法,单例对象才会创建出来(延迟创建)。
看完记得点个赞哦OUO