Это действительно пример шаблона адаптера? - PullRequest
7 голосов
/ 24 августа 2010

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

public interface EventHandler {
    void handleEvent1();

    void handleEvent2();

    void handleEvent3();

    void handleEvent4();
}

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

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

Ответы [ 4 ]

9 голосов
/ 24 августа 2010

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

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

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

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

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

2 голосов
/ 24 августа 2010

AWT имеет много реализаций интерфейсов, которые они называют «Адаптер», например MouseAdapter, FocusAdapter.И нет, они не являются реализациями шаблона адаптера .Это удобные классы, я бы просто назвал их заглушки .

2 голосов
/ 24 августа 2010

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

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

2 голосов
/ 24 августа 2010

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

...