从应用程序隐藏系统特定的详细信息

时间:2011-03-10 14:37:14

标签: java oop design-patterns

我想从我的应用程序逻辑隐藏系统特定的实现。我选择了以下设计(抽象示例):

public class Mesh implements Drawable {

    @Override
    public void draw(API api) {
        api.render(this);
    }

}

public class OpenGL implements API {

    @Override
    public void render(Drawable drawable) {
        // render drawable, using OpenGL
        // another API implementing class might use DirectX instead
    }

}

特别是draw(API api)方法对我来说很奇怪,因为传递给API的对象会将自身传递给API

我(天真)的问题是:

  1. 这最终是桥模式吗?
  2. 这种方法是否适当实施? (目的是隐藏系统细节。)
  3. 您会推荐更好的方法吗?

1 个答案:

答案 0 :(得分:1)

如果您将API传递给Mesh的构造函数,它将是一个Bridge模式。另一方面,它看起来类似于访客模式。

这种方法可能是正确的,但我不能从简短的片段中说出来。一个好的设计可能看起来像这样(这是访客模式的一个简单例子)。

  • 接口API
    • void render(Mesh mesh);
    • void render(Sprite sprite);
  • 界面Drawable
    • void draw(API api);
  • class Mesh实现了Drawable
    • void draw(API api){api.render(this); }
  • class Sprite实现了Drawable
    • void draw(API api){api.render(this); }
  • class Group实现Drawable
    • void draw(API api){for(Drawable e:elements)e.draw(api); }

在这种情况下,这个引用传递是有意义的,因为Drawable的实现选择API的正确(重载)方法。

如果没有更多信息,这就是我的建议。