基于Java8的新特性写一个通用的Builder工具类

在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"}

猜你喜欢

转载自blog.csdn.net/qq_17805707/article/details/132043413