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

发布于 2024-10-21 09:13:29 字数 618 浏览 1 评论 0原文

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

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. 您会推荐更好的方法吗?

I'd like to hide system specific implementations from my application logic. I have chosen the following design (abstract example):

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
    }

}

Especially the draw(API api) method looks odd to me because the object, the API is passed to, will pass itself to the API.

My (naive) questions are:

  1. Is this eventually a Bridge Pattern?
  2. Is this approach a proper implementation? (The aim is to hide system specifics.)
  3. Would you recommend a better approach?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

蹲墙角沉默 2024-10-28 09:13:29

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

这种方法可能是正确的,但我无法从简短的片段中看出这一点。一个好的设计应该是这样的(这是访问者模式的一个简单示例)。

  • 接口API
    • 无效渲染(Mesh网格);
    • void render(Sprite sprite);
  • 可绘制界面
    • 无效绘制(API api);
  • Mesh类实现了Drawable
    • void draw(API api) { api.render(this); } }
  • 实现了 Drawable
    • void draw(API api) { api.render(this); } }
  • 类 Group 实现 Drawable
    • void draw(API api) { for (Drawable e: elements) e.draw(api); } }

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

如果没有更多信息,这就是我的推荐。

It would be a Bridge Pattern if you passed the API to the constructor of Mesh. On the other hand, it looks similar to the visitor pattern.

This approach may be proper, but I cant tell that from the short snippet. A good design could look like this (which is a simple example of the visitor pattern).

  • interface API
    • void render(Mesh mesh);
    • void render(Sprite sprite);
  • interface Drawable
    • void draw(API api);
  • class Mesh implements Drawable
    • void draw(API api) { api.render(this); }
  • class Sprite implements Drawable
    • void draw(API api) { api.render(this); }
  • class Group implements Drawable
    • void draw(API api) { for (Drawable e: elements) e.draw(api); }

In this case, this reference passing makes sense, because the implementations of Drawable select the proper (overloaded) method of the API.

Without more information, this is what I would recommend.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文