У меня есть интерфейс -" 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» подсказывает мне, что это пример шаблона адаптера ... но так ли это на самом деле? Я думал, что смысл адаптера в том, чтобы перевести существующую реализацию во что-то еще. Я не вижу, как это происходит здесь.
Если это не пример шаблона адаптера, что это? Наверняка что-то подобное было идентифицировано.
Нет, это не пример шаблона адаптера, как определено здесь:
http://en.wikipedia.org/wiki/Adapter_pattern
Однако в Java Event как вы упомянули, часто используется термин адаптер. Несмотря на то, что слово «адаптер» одинаково в обоих, они не относятся к одному и тому же. Адаптеры, которые появляются в пакете java.awt.event, призваны упростить создание обработчика событий, который обрабатывает только один метод, без необходимости писать кучу пустых методов. Это всего лишь классы быстрого доступа.
API событий Java обычно имеет единообразное именование этих классов. При наличии класса событий SomeEvent
существует интерфейс SomeListener
для прослушивания события и класс SomeAdapter
, реализующий интерфейс прослушивателя с пустыми методами. Не все события имеют все три из этих частей, но названия и функции трех согласованы.
В приведенном вами примере я бы переименовал класс EventAdapter
, чтобы он соответствовал существующему API Java.
Вы правы, это не пример шаблона адаптера, а широко распространенное соглашение о том, что «по умолчанию пусто для», называемых «адаптерами»
. Например, API-интерфейсы Java UI часто предоставляют такие адаптеры для MouseListener интерфейсы.
Вы правы, это не пример шаблона проектирования адаптера, а скорее тривиальная реализация интерфейса по умолчанию. Я бы переименовал его в DefaultEventHandler
, EmptyEventHandler
или GenericEventHandler
.