Лучший шаблон дизайна, чтобы обернуть библиотеку конкретных объектов? - PullRequest
0 голосов
/ 10 февраля 2012

Я довольно новичок в разработке шаблонов.Каков наилучший шаблон, когда разработчик использует библиотеку (в моем случае это библиотека для скрининга HTML) и не хочет, чтобы клиентские / вызывающие классы «прилипали» к этой библиотеке?

Например, если я использую класс в библиотеке с именем HtmlPage, а клиент говорит «getPage ()» - я не хочу возвращать объект HtmlPage из библиотеки, но какая-то оболочкаHtmlPage, который я могу поменять, если решу поменять библиотеки.Это так просто?Или я что-то упустил?Должен ли я сделать это для каждого объекта в библиотеке?

public class HtmlPageWrapper {
    private HtmlPage htmlPage;

    public HtmlPageWrapper(HtmlPage) {}

    public getTableOnPage() {
        return htmlPage.getTableOnPage;
    }

    // etc...

}

Спасибо!

Ответы [ 3 ]

2 голосов
/ 10 февраля 2012

Я думаю, что вы заинтересованы в шаблоне адаптера .Это позволит вам сохранить эти сторонние классы подальше от вашего кода, создав класс Adapter, который предоставляет абстрактные операции, которые ваше приложение будет использовать.

Вам не обязательно делать это для каждого объекта в библиотеке, просто убедитесь, что вы обернули основные объекты, с которыми вам нужно будет взаимодействовать.

0 голосов
/ 10 февраля 2012

Вы также можете попробовать шаблон Façade, если хотите скрыть библиотеку за одним интерфейсом, который затем может иметь разные реализации для разных библиотек.

Предоставляет унифицированный интерфейс для набора интерфейсов в подсистеме.,Фасад определяет высокоуровневый интерфейс, который упрощает использование подсистемы.

Ссылка: Фасад

0 голосов
/ 10 февраля 2012

Я бы просто расширил его и переопределил те, которые я хочу изменить / добавить, затем я мог бы использовать те, которые мне все еще нравятся,

public class HtmlPageWrapper extends HtmlPage {

    public HtmlPageWrapper(HtmlPage p) {
         super(p);
    }

    @Override
    public getTableOnPage() {
        return super.getTableOnPage();
    }

    // etc...

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