java - 是否存在结构不同但做类似事情的方法的设计模式?

标签 java android design-patterns opengl-es

目前我正在 Android 中使用 OpenGLES 2.0,我正在努力开发一种灵活的编程架构来动态处理不同的着色器和不同的对象。

例如,我有两个类:SimpleShaderImageShader

要绘制一个SimpleShader,它需要指定一个顶点数组:

SimpleShader s = new SimpleShader;
s.draw(final FloatBuffer pFloatBuffer);

同样,对于ImageShader,它需要一组点和一个纹理来绘制:

ImageShader i = new ImageShader;
i.draw(final FloatBuffer pFloatBuffer, final Texture pTexture);

我的问题是这样的; SimpleShaderImageShader 都是Shader 的类型。我正在寻找某种允许我使用抽象 draw() 方法的设计模式。谁能提出任何建议?我想这与继承 Shader 特定绘图接口(interface)的对象有关?

最佳答案

首先,您需要一个包装类作为参数。如:

public class ShaderParameter{
    public FloatBuffer PFloatBuffer;
}

如果需要 PFloatBuffer(强制),则将其注入(inject)构造函数。

然后您可以再次创建一个用于绘图的基类。如:

public abstract class Shader{
    public void Draw(ShaderParameter param);
}

然后你可以继承这些类来满足你的需要:

public class ImageShaderParameter extends ShaderParameter{
    public Texture PTexture;
}

public class ImageShaderWrapper extends Shader{
    public override void Draw(ShaderParameter param){
        ImageShaderParameter parameter = (ImageShaderParameter)param;
        ImageShader i = new ImageShader;
        i.draw(parameter.PFloatBuffer, parameter.PTexture);
    }
}

这可以使用泛型来进一步增强,以避免参数转换和策略模式。但是,该解释太长,适合其他问题。

(代码可能基于C#,因为我的经验更多是C#)

关于java - 是否存在结构不同但做类似事情的方法的设计模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21224152/

相关文章:

android - 仅在 Android 而非 iOS 上使用 "Volley"发出的服务器请求超时

python - 是否有一种设计模式可以安排 "event"将来发生?

java - 具有后台和ui线程的线程池执行器与android中的异步任务?

java - RxJava 一次只执行一个 Observable

java - 如何使 JSliders 仅显示四肢

java - XY 图 : Annotation is placed incorrectly with respect to Y axis

android - 在后台监听触摸事件

android - Dagger-Hilt @AndroidEntryPoint 不适用于 BottomSheetDialogFragment()

design-patterns - IoC、容器和 NServiceBus 混淆

c# - 如何组织数据库中的数据?