前言
Monkey程序中,作者设计了两个工具类,分别是MonkeyUtils、MoneyPermissionUtil,今天这篇文章介绍作者如何设计工具类MonkeyUtils
MonkeyUtils类设计分析
由于该类定位是工具类,作者做了几件很酷的事情
1、将该类设计为Abstract,使其不能创建对象
public abstract class MonkeyUtils {
}
2、构造方法设为私有
private MonkeyUtils() {
}
3、只有静态变量与常量,没有实例变量
private static final java.util.Date DATE = new java.util.Date();
private static final SimpleDateFormat DATE_FORMATTER = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss.SSS ");
private static PackageFilter sFilter;
4、只有静态方法,没有实例方法
5、还定义了一个静态内部类
public static class PackageFilter {
//省略很多代码……
}
MonkeyUtils中的单例模式设计
在MonkeyUtils类中有一个静态内部类PackageFilter,MonkeyUtils类持有的一个静态变量用于持有该静态内部类的对象。
private static PackageFilter sFilter;
如果想要获得PackageFilter对象,只需调用MonkeyUtils的静态方法getPackagerFilter()
public static PackageFilter getPackageFilter() {
if (sFilter == null) {
sFilter = new PackageFilter();
}
return sFilter;
}
这是一个非线程安全的单例模式,无法在多线程环境下使用
MonkeyUtils中的日期转换为字符串功能
private static final java.util.Date DATE = new java.util.Date();
private static final SimpleDateFormat DATE_FORMATTER = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss.SSS ");
/**
* Return calendar time in pretty string.
*/
public static synchronized String toCalendarTime(long time) {
DATE.setTime(time);
return DATE_FORMATTER.format(DATE);
}
作者将方法设计为同步方法,同一时刻只有一个线程可以调用该方法,共享变量DATE、DATE_FORMATTER获得了保护,确保每个线程可以获得一个唯一的字符串时间!