
本文介绍了如何使用 Builder 模式来解决函数参数类型不确定的问题。Builder 模式允许我们在构建对象时,逐步设置对象的属性,从而避免了创建大量重载方法或使用复杂的条件判断。
Builder 模式是一种创建型设计模式,它将一个复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。Builder 模式通常包含以下几个角色:
以下代码示例展示了如何使用 Builder 模式来构建一个 Range 函数,该函数接受 scale、min 和 max 三个参数,每个参数既可以是 double 类型的数值,也可以是接受 PVector 类型参数并返回 Double 类型的函数。
import processing.core.PVector;
import java.io.IOException;
import java.util.List;
import java.util.function.Function;
import java.util.stream.Stream;
import static processing.core.PApplet.map;
import static processing.core.PApplet.noise;
public class RangeBuilderExample {
public static void main(String... args) throws IOException {
List<PVector> pvs = List.of(new PVector(0, 0));
Stream<Double> s = pvs.stream().map(new RangeBuilder().scale(.02)
.min(0)
.max(255)
.build());
Stream<Double> s2 = pvs.stream().map(new RangeBuilder().scale(new RangeBuilder().scale(.02)
.min(.1)
.max(.002)
.build())
.min(0)
.max(255)
.build());
}
public static final class RangeBuilder {
private Function<PVector, Double> scale;
private Function<PVector, Double> min;
private Function<PVector, Double> max;
public RangeBuilder scale(Function<PVector, Double> scale) {
this.scale = scale;
return this;
}
public RangeBuilder scale(double scale) {
return scale(in -> scale);
}
public RangeBuilder min(Function<PVector, Double> min) {
this.min = min;
return this;
}
public RangeBuilder min(double min) {
return min(in -> min);
}
public RangeBuilder max(Function<PVector, Double> max) {
this.max = max;
return this;
}
public RangeBuilder max(double scale) {
return scale(in -> scale);
}
public Function<PVector, Double> build() {
return pv -> map(noise(pv.x * scale.apply(pv), pv.y * scale.apply(pv)), 0, 1, min.apply(pv), max.apply(pv));
}
}
}代码解释:
使用示例:
在 main 方法中,我们首先创建了一个 List<PVector> 类型的列表 pvs,其中包含一个 PVector 对象。然后,我们使用 RangeBuilder 类来构建两个 Range 函数 s 和 s2。
最后,我们使用 pvs.stream().map() 方法将 s 和 s2 函数应用于 pvs 列表中的每个 PVector 对象,并将结果存储在 Stream<Double> 类型的流中。
Builder 模式是一种非常有用的设计模式,它可以帮助我们构建复杂的对象,并提高代码的可读性和可维护性。在函数参数类型不确定的场景中,使用 Builder 模式可以避免创建大量重载方法或使用复杂的条件判断,从而使代码更加简洁易懂。 通过使用 Builder 模式,我们可以更加灵活地处理动态参数类型,并构建出更加强大的函数。
以上就是动态参数类型处理:使用 Builder 模式构建灵活的函数的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号