文章目录
- 一、Json 生成器 JsonBuilder
- 二、Xml 生成器 MarkupBuilder
- 三、Swing 生成器 SwingBuilder
一、Json 生成器 JsonBuilder
JsonBuilder 原型如下 , 该类继承自 GroovyObjectSupport 类 , 其核心是 invokeMethod , 利用元编程实现 Json 生成器的作用 , 帮助生成 Json 字符串 ;
代码语言:javascript复制public class JsonBuilder extends GroovyObjectSupport implements Writable {
public Object invokeMethod(String name, Object args) {
if (args != null && Object[].class.isAssignableFrom(args.getClass())) {
Object[] arr = (Object[]) args;
if (arr.length == 0) {
return setAndGetContent(name, new HashMap<String, Object>());
} else if (arr.length == 1) {
if (arr[0] instanceof Closure) {
return setAndGetContent(name, JsonDelegate.cloneDelegateAndGetContent((Closure) arr[0]));
} else if (arr[0] instanceof Map) {
return setAndGetContent(name, arr[0]);
}
} else if (arr.length == 2) {
if (arr[0] instanceof Map && arr[1] instanceof Closure) {
Map subMap = new LinkedHashMap();
subMap.putAll((Map) arr[0]);
subMap.putAll(JsonDelegate.cloneDelegateAndGetContent((Closure) arr[1]));
return setAndGetContent(name, subMap);
} else if (arr[0] instanceof Collection && arr[1] instanceof Closure) {
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
for (Object it : (Collection) arr[0]) {
list.add(JsonDelegate.curryDelegateAndGetContent((Closure) arr[1], it));
}
return setAndGetContent(name, list);
}
}
throw new JsonException("Expected no arguments, a single map, a single closure, or a map and closure as arguments.");
} else {
return setAndGetContent(name, new HashMap<String, Object>());
}
}
}
二、Xml 生成器 MarkupBuilder
MarkupBuilder 继承了 BuilderSupport 类 , 其原型如下 , 其中封装了一系列的方法 , 帮助生成 Xml 文件 ;
代码语言:javascript复制public class MarkupBuilder extends BuilderSupport {
}
三、Swing 生成器 SwingBuilder
Swing 生成器 SwingBuilder , 继承 FactoryBuilderSupport 类 ;
代码语言:javascript复制public class SwingBuilder extends FactoryBuilderSupport {
}