前言
两个月前写过一篇文章基于Django设计的Restful MockServer,是基于网络的。很多人都觉得思路不错,但是主要是太麻烦了。本篇博文就根据Java开发一个假数据生成器,称为JBMock。
主要功能
1、提供同步、异步获取数据
2、异步获取数据提供线程切换
原理图
原理图
1、使用反射,获取UserEntity的属性和对应注解(Type注解)
2、获取注解里面的值,然后使用TypeParser解析注解值,然后设置到对应的属性上
3、使用ThreadDispatcher完成回调
代码分析
包结构
包结构
代码
Type注解
package com.august1996.anno;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface Type {
String value();
}
这个注解的意义在于我们给某个属性加上这个注解,然后根据类型去给属性赋值,例如value为username时,那么这个属性就会被赋上小明、小红、小花等值
TypeParser类型解析器
package com.august1996.core;
public interface TypeParser {
Object parser(String type);
}
该接口的作用是解析Type注解的value,返回对应的值
OnMockedCallback回调
package com.august1996.callback;
import java.util.ArrayList;
public interface OnMockedCallback {
void onMocked(ArrayList listEntity);
}
当异步模拟数据完成时,该回调带着结果被执行
ThreadDispatcher线程切换
package com.august1996.thread;
import java.util.ArrayList;
import com.august1996.callback.OnMockedCallback;
public interface ThreadDispatcher {
void dispatcher(ArrayList value, OnMockedCallback callback);
}
该接口完成回调时的线程切换,本项目是JavaSDK的,如果接入Android时,只需要继承自该接口使用Handler就能完成主线程切换
DefaultDispatcher分配默认线程
package com.august1996.thread;
import java.util.ArrayList;
import com.august1996.callback.OnMockedCallback;
public class DefaultDispatcher implements ThreadDispatcher {
@Override
public void dispatcher(ArrayList value, OnMockedCallback callback) {
if (callback != null) {
callback.onMocked(value);
}
}
}
该类是最简单的ThreadDispatcher,如果需要在Android中切换主线程,只需要继承ThreadDispatcher,然后使用Handler切换回主线程就OK了
DispatcherHolder管理类
package com.august1996.thread;
import java.util.HashMap;
import java.util.Map;
public class DispatcherHolder