Android之Monkey源码分析(第X篇:工具类MonkeyUtils的设计思想)

本文分析了MonkeyUtils工具类的设计,包括将其声明为抽象类防止实例化,私有构造方法,只包含静态变量和常量,以及只提供静态方法。此外,还探讨了MonkeyUtils中的非线程安全单例模式实现,以及同步方法保护日期转换为字符串功能,确保线程安全。
摘要由CSDN通过智能技术生成

前言

    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获得了保护,确保每个线程可以获得一个唯一的字符串时间!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值