在23中设计模式中有一种模式叫构建者模式,也就是Builder,但是往往每个类都需要定义一个Builder,这样容易造成类爆炸,有没有一种方法可以写一个通用的Builder呢,答案是有的,直接上代码:
1、通用的Builder类:
public class Builder<T> {
public T instace;
private Builder(T instace) {
this.instace = instace;
}
public static <T> Builder<T> of(Class<T> tClass) {
T instance = null;
try {
instance = tClass.newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return new Builder<T>(instance);
}
public <U> Builder<T> with(BiConsumer<T, U> setter, U value) {
setter.accept(instace, value);
return this;
}
public T build() {
return instace;
}
}
2、定义一个pojo类:
public class User {
private int age;
private String name;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
3、单元测试验证:
这个在单元测试的可以构建请求参数,不过还是有点麻烦,当对请求参数没有特定要求的时候,可以采用另一种方式来生成随机参数:
首先引入依赖:
<dependency>
<groupId>uk.co.jemos.podam</groupId>
<artifactId>podam</artifactId>
<version>7.2.11.RELEASE</version>
<scope>test</scope>
</dependency>
生成随机参数:
@Test
public void testPodam() {
PodamFactory podamFactory = new PodamFactoryImpl();
User user = podamFactory.manufacturePojo(User.class);
System.err.println(JSON.toJSONString(user));
}
输出:{"age":1752295800,"name":"Mr9y88dDP2"}