【发布时间】:2011-07-10 06:34:47
【问题描述】:
这更像是一个设计问题而不是图形问题,但这里有一点背景知识:我正在使用 OpenGL(在 Java 中,使用 JOGL)编写一个程序,它可以从 .obj 文件加载网格并渲染它.到目前为止没有问题,但我需要能够对网格应用一系列过滤器或转换,例如
- 曲面细分
- 向顶点添加随机噪声
- 对噪声网格应用平滑算法
- 为网格着色(可能基于也可能不基于平滑网格和原始干净网格)
将按顺序应用其中几个过滤器。我还想为其他人提供某种一致的接口来编写他们自己的(可能是通用的)过滤器。我该怎么办?
主要问题是过滤器可能需要不同的参数集,例如一种平滑算法可能需要用户选择两个参数(在运行时,使用 GUI),而另一种可能不需要。类似地,一些着色算法可能只需要平滑网格和 RGB 颜色,另一种可能需要平滑网格和干净网格(从中生成颜色)。所以调用可能看起来像:
mesh = smoothingFilter1.filter(mesh, booleanParam);
但可能完全不同:
mesh = smoothingFilter2.filter(mesh, intParam1, intParam2, floatParam);
显然我的代码需要能够调用通用过滤方法。为Filter 定义一个抽象类或接口,并使用未实现的方法将其自身(及其所需的参数)注册到某种控制类是一个好主意吗?看起来很复杂,但我想不出任何其他方法来让程序使用具有任意签名的过滤器方法。我什至不确定这个想法是否可行......
有处理这种情况的设计模式吗?
【问题讨论】:
-
感谢您的回复,刚开始尝试这些东西,发现所有 3 个答案都很有用
标签: java design-patterns interface parameters