Скрыть системные детали из приложения - PullRequest
1 голос
/ 10 марта 2011

Я хотел бы скрыть системные реализации от логики моего приложения. Я выбрал следующий дизайн (абстрактный пример):

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 Ответ

1 голос
/ 10 марта 2011

Это был бы паттерн моста, если бы вы передавали API в конструктор Mesh.С другой стороны, он похож на шаблон посетителей.

Этот подход может быть правильным, но я не могу сказать это по короткому фрагменту.Хороший дизайн может выглядеть следующим образом (это простой пример шаблона посетителя).

  • API интерфейса
    • void render (Mesh mesh);
    • voidrender (Sprite sprite);
  • интерфейс Drawable
    • void draw (API api);
  • класс Mesh реализует сетку Drawable
    • void draw (API api) {api.render (this);}
  • реализует класс Sprite Drawable
    • void draw (API api) {api.render (this);}
  • Класс Group реализует Drawable
    • void draw (API api) {for (Drawable e: elements) e.draw (api);}

В этом случае передача этой ссылки имеет смысл, поскольку реализации Drawable выбирают правильный (перегруженный) метод API.

Без болееинформация, это то, что я бы порекомендовал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...