gpt4 book ai didi

java - 为具有不同参数的方法设计接口(interface)

转载 作者:行者123 更新时间:2023-11-29 07:19:20 25 4
gpt4 key购买 nike

这更像是一个设计问题,而不是图形问题,但这里有一些背景知识:我正在使用 OpenGL(在 Java 中,使用 JOGL)编写一个程序,该程序可以从 .obj 文件加载网格并渲染它。到目前为止没有问题,但我需要能够对网格应用一系列过滤器或转换,例如

  • 镶嵌面
  • 向顶点添加随机噪声
  • 对噪声网格应用平滑算法
  • 为网格着色(可能基于也可能不基于平滑网格和原始干净网格)

将按顺序应用其中的几个过滤器。我还想为其他人提供某种一致的接口(interface)来编写他们自己的(可能是通用的)过滤器。我该怎么办?

主要问题是过滤器可能需要不同的参数集,例如一种平滑算法可能需要用户选择两个参数(在运行时,使用 GUI),而另一种可能不需要。类似地,一些着色算法可能只需要平滑的网格和 RGB 颜色,另一种着色算法可能需要平滑的网格和干净的网格(从中生成颜色)。所以调用可能如下所示:

mesh = smoothingFilter1.filter(mesh, booleanParam);

但可能完全不同:

mesh = smoothingFilter2.filter(mesh, intParam1, intParam2, floatParam);

显然我的代码需要能够调用通用过滤方法。为 Filter 定义一个抽象类或接口(interface),并使用未实现的方法将其自身(及其所需的参数)注册到某种控制类中,这是一个好主意吗?看起来相当复杂,但我想不出任何其他方法可以让程序使用具有任意签名的过滤方法。我什至不确定这个想法是否可行......

有没有一种设计模式可以处理这种情况?

最佳答案

实际上你根本不需要这些参数。 Mesh filter(Mesh mesh); 就足够了。将其他参数移至过滤器的不同具体实现的构造函数。

看起来像这样:

Filter smoothingFilter1 = new FirstFilter(booleanParam);    
mesh = smoothingFilter1.filter(mesh);

Filter smoothingFilter2 = new SecondFilter( intParam1, intParam2, floatParam);
mesh = smoothingFilter2.filter(mesh);

为了实例化,您可以使用以下内容:

public interface AbstractFilterFactory {
Params getRequiredParams();
Filter createFilter(Params params);
}

public interface Params {
// some interface that describes specific parameters that are required
// probably a collection of Parameter classes which has name, type and value information.
}

public class FirstFilterFactory implements AbstractFilterFactory {
// return a concrete params object use that to instantiate a concrete filter.
}

关于java - 为具有不同参数的方法设计接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6639642/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com