Это действительно пример шаблона адаптера?

У меня есть интерфейс -" EventHandler "- который объявляет несколько методов ,

public interface EventHandler {
    void handleEvent1();

    void handleEvent2();

    void handleEvent3();

    void handleEvent4();
}

У меня также есть класс - «EventHandlerAdapter» - который реализует EventHandler. Однако на самом деле он ничего не «внедряет». Дело в том, что если другой класс хочет реализовать EventHandler, но не все его методы, он может просто расширить EventHandlerAdapter и переопределить только те методы, которые он хочет.

public class EventHandlerAdapter implements EventHandler {
    public void handleEvent1() {}

    public void handleEvent2() {}

    public void handleEvent3() {}

    public void handleEvent4() {}
}

Я видел нечто подобное на более одного случая. Название «EventHandlerAdapter» подсказывает мне, что это пример шаблона адаптера ... но так ли это на самом деле? Я думал, что смысл адаптера в том, чтобы перевести существующую реализацию во что-то еще. Я не вижу, как это происходит здесь.

Если это не пример шаблона адаптера, что это? Наверняка что-то подобное было идентифицировано.

7
задан Colin Hebert 24 August 2010 в 13:25
поделиться

3 ответа

Нет, это не пример шаблона адаптера, как определено здесь:

http://en.wikipedia.org/wiki/Adapter_pattern

Однако в Java Event как вы упомянули, часто используется термин адаптер. Несмотря на то, что слово «адаптер» одинаково в обоих, они не относятся к одному и тому же. Адаптеры, которые появляются в пакете java.awt.event, призваны упростить создание обработчика событий, который обрабатывает только один метод, без необходимости писать кучу пустых методов. Это всего лишь классы быстрого доступа.

API событий Java обычно имеет единообразное именование этих классов. При наличии класса событий SomeEvent существует интерфейс SomeListener для прослушивания события и класс SomeAdapter , реализующий интерфейс прослушивателя с пустыми методами. Не все события имеют все три из этих частей, но названия и функции трех согласованы.

В приведенном вами примере я бы переименовал класс EventAdapter , чтобы он соответствовал существующему API Java.

9
ответ дан 6 December 2019 в 13:59
поделиться

Вы правы, это не пример шаблона адаптера, а широко распространенное соглашение о том, что «по умолчанию пусто для», называемых «адаптерами»

. Например, API-интерфейсы Java UI часто предоставляют такие адаптеры для MouseListener интерфейсы.

2
ответ дан 6 December 2019 в 13:59
поделиться

Вы правы, это не пример шаблона проектирования адаптера, а скорее тривиальная реализация интерфейса по умолчанию. Я бы переименовал его в DefaultEventHandler , EmptyEventHandler или GenericEventHandler .

2
ответ дан 6 December 2019 в 13:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: