试想下有这么一个场景,有一个类,整个项目都会用得到,使用的概率很频繁,你还会每用一次就new一次吗?这样做不是不可以,但是会很耗内存,这时就要想到用单例了。
单例有如下两个特点:
1.整个项目只有一个实例。
2.这个实例在项目中使用概率很高
单例又分为两种单例:
1.饱汉式单例(使用到了静态代码块,在类load进内存时,就加载了实例)
2.饿汉式单例(在创建实例时,当原来的对象为null则重新new个,否则还是用已存在的实例)
一般用于工具类比较多,我们直接看代码如何实现的吧!
/** * 饱汉式单例 */ public class SingleInstance { static{ instance = new SingleInstance(); } private static SingleInstance instance; //将构造函数私有化,使外界无法通过构造函数获得对象 private SingleInstance() { } public static SingleInstance getInstance() { return instance; } }
单例的优点:/** * 饿汉式单例 * */ public class SingleInstance2 { private static SingleInstance2 instance2; private SingleInstance2(){} public static SingleInstance2 getInstance2() { if (instance2 == null) { instance2 = new SingleInstance2(); } return instance2; } }
1.避免类的重复创建
2.节约内存
3.避免多个实例引起程序逻辑错误的场合
以上是个人对单例的理解,如果有理解不当的地方,还请指出,一同进步,多谢了!