接触这个模式,是从别人的代码中接触到这个,当时接触到这个,也一脸懵。 本人没有java基础,看代码也吃力。
碰到这个,本着学习为主,还是记录下来。
所谓单例模式,就是在整个程序中,某类只有一个实例, 且自行实例化并向整个系统提供这个实例.
相对于那些比较耗内存的类,只实例化一次可以大大提高性能,尤其是在移动开发中。
以下我用源码说明。
public class FaceServer {
public static final String TAG= "FaceServer";
/**
* 引擎相关
*/
private static FaceServer faceServer = null;
public static FaceServer getInstance() {
if (faceServer == null) {
synchronized (FaceServer.class) {
if (faceServer == null) {
faceServer = new FaceServer();
}
}
}
return faceServer;
}
/**
* 引擎初始化
*/
public boolean init(Context context) {
synchronized (this) {
//初始化操作
return true;
}
}
}
调用如下:
boolean d= FaceServer.getInstance().init(context);
可以发现,在调用FaceServer.getInstance()方法时,会去判断实例是否为空,如果实例存在,直接返回,不存在,则新创建并返回。然后才是调用init方法.
后来弄明白这种方式是懒汉模式。
该模式下,类的加载不会创建实例,因此类的加载速度快,但运行时首次获取对象的速度较慢。
与此对应的方式是饿汉模式。
此处我找了网上的一段代码来说明:
public class Singleton {
private static Singleton instance = new Singleton();
private Singleton(){
}
public static Singleton getInstance() {
return instance;
}
}
该模式下,类在加载时完成了初始化,所以类加载较慢,但运行时获取对象的速度快。
两种模式各有优势差异,目前我也只见过懒汉模式,还未见过饿汉模式(学习源码暂时还没有碰到)。
当一个类会被多个类频繁使用时,可以使用单例模式,节省内存,加快对象访问速度。