第一种:单例模式 方法非静态
public class LogUtil {
private static volatile LogUtil instance;
private LogUtil(){};
/**
* 单例模式 获取实例方法
* @return
*/
public static LogUtil getInstance(){
if (instance == null){
synchronized (LogUtil.class){
if (instance == null){
instance = new LogUtil();
}
}
}
return instance;
}
/**
* 打印日志测方法
* @param content
*/
public void print(String content){
Log.i("tag",content);
}
}
第二种:静态方法 无需实例化
public class LogUtil2 { /** * 打印日志测方法 * @param content */ public static void print(String content){ Log.i("tag",content); } }
区别分析:(1)使用方式的区别第一种使用方法 :LogUtil.getInstance().print("test");第二种使用方法 :LogUtil2.print("test");
(2)内存消耗的区别
第一种使用方法 :在堆中创建了实例加上静态变量的引用,只要app不销毁就会常驻内存。第二种使用方法 :在程序启动时就分配了静态区域的内存,也会常驻内存。
(3)效率方面
第二种使用方法的效率会略高一些,静态的方法是被共享的,可以直接调用。
如何选择:静态方法适合去完成一个独立的封闭的功能,所以如果方法中不需要维持一些外部的状态值,可以用静态方法的方式,否则做成单例的方式。除了外部状态值的这种情况,个人认为这两种方式均可,无伤大雅。对外部的状态值的举例:例如在工具类里面有一些成员变量,假如有个boolean值,你的方法中需要判断或改变这个值,这种情况就是有外部状态的情况。