近日有个朋友去面试了,结果被问到了单例模式,朋友的回答好像不是很让人满意,于是我就总结了一下。
其实单例的写法有很多种,下面总结了常用的几种。
1、最简单的饿汉模式
这种方式比较简单,但是缺点也明显,就是浪费资源。如果这个单例的对象非常大,包含了很多属性,那么这种饿汉一上来就实例化对象就是非常浪费了。
2、懒汉模式
这种的虽然克服了饿汉的缺点,但是缺带来了新的问题,在并发情况下就不能保证对象唯一了。
3、懒汉的升级版
直接在getInstance方法前加上synchronized修饰符。
这种的缺陷也是有的,那就是synchronized修饰方法的缺陷了。
4、双重检查
5、静态内部类的方式
6、利用枚举
以上几种比较推荐5和6,在性能上算是比较好的了。
其实以上几种都还有缺陷,比如序列化后再反序列化?