All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.moon.core.util.Builder Maven / Gradle / Ivy

package com.moon.core.util;

import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;
import java.util.function.Supplier;

/**
 * 通用建造者,使用方法:
 * 

* 摘自:https://mp.weixin.qq.com/s/VzkdhRUUAGgKpTWspeypkA *

 * package com.example;
 *
 * public class Employee {
 *
 *     private String username;
 *     private String address;
 *     private int age;
 *
 *     public void setUsername(String username) {
 *         this.username = username;
 *     }
 *
 *     public void setAge(int age) {
 *         this.age = age;
 *     }
 *
 *     // 省略其他 setter 和 getter 方法
 *
 *     public static void main(String[] args) {
 *         Employee employee = Builder.of(Employee::new)
 *             .with(Employee::setUsername, "username")
 *             .with(Employee::setAge, 24)
 *             // 其他 setter
 *             .build();
 *     }
 * }
 * 
* * @author benshaoye */ public final class Builder { private final Supplier creator; private List> setters; public Builder(Supplier creator) { this.creator = creator; } private List> ensureSetters() { return setters == null ? (setters = new ArrayList<>()) : setters; } public static Builder of(Supplier creator) { return new Builder<>(creator); } public

Builder with(Setter setter, P param) { ensureSetters().add(it -> setter.set(it, param)); return this; } public Builder with(BiSetter setter, P1 p1, P2 p2) { ensureSetters().add(it -> setter.set(it, p1, p2)); return this; } public Builder with(MultiSetter setter, P1 p1, P2 p2, P3 p3) { ensureSetters().add(it -> setter.set(it, p1, p2, p3)); return this; } public T build() { if (creator == null) { return null; } T instance = creator.get(); List> setters = this.setters; if (setters != null) { for (Consumer setter : setters) { setter.accept(instance); } } return instance; } public interface Setter { /** * 设置值 * * @param it 对象 * @param param 值 */ void set(T it, P param); } public interface BiSetter { /** * 设置值 * * @param it 对象 * @param p1 值 * @param p2 值 */ void set(T it, P1 p1, P2 p2); } public interface MultiSetter { /** * 设置值 * * @param it 对象 * @param p1 值 * @param p2 值 * @param p3 值 */ void set(T it, P1 p1, P2 p2, P3 p3); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy