Почему MouseAdapter является адаптером? - PullRequest
13 голосов
/ 12 февраля 2012

Название (и javadocs) подразумевают, что MouseAdapter является адаптером (шаблон проектирования). Но я не вижу этого как такового - он ничего не приспосабливает к чему-либо, на первый взгляд, по крайней мере

Единственная возможная адаптация состоит в том, что вы можете передать экземпляр MouseAdapter любому методу, который ожидает любой из интерфейсов. Таким образом, вы позволяете использовать экземпляр MouseListener, где ожидается только MouseMotionListener. Но никакого «перевода» не происходит. И он не соответствует UML GoF - в версии «адаптер класса» ожидается, что вызов одного метода вызывает метод из адаптера.

Итак, это адаптер (шаблон проектирования) или случайное имя, вызывающее путаницу?

Ответы [ 4 ]

13 голосов
/ 12 февраля 2012

MouseAdapter впервые появился в Java 1.1, выпущенной в Фев 1997 . Это означает, что он был разработан где-то в 1996 году (или в 1995 году?)

UML (в его проекте) было завершено к 1997 году .

Первая книга GoF по шаблонам проектирования была опубликована в 1995 .

Итак, я не думаю, что Адаптер в MouseAdapter имел какое-либо отношение к соответствующему шаблону проектирования. Или, даже если бы это было так, у разработчиков просто не было единого языка для выражения шаблонов проектирования, из-за которого было бы очень трудно понять истинное значение.

5 голосов
/ 12 февраля 2012

Да, это не адаптер в смысле шаблона GoF, потому что он ничего не адаптирует.Его можно считать экземпляром шаблона абстрактного класса [ woolf97 ]:

Суперкласс может предоставлять полную реализацию, которая является реализацией по умолчанию или минимальной реализацией.

1 голос
/ 12 февраля 2012

Как уже говорили другие ответы, это не шаблон GoF Adapter.Основная цель этого - дать возможность реализовать MouseListener (или MouseMotionListener), переопределяя только нужные методы в MouseAdapter (часто просто mouseClicked()), вместо того, чтобы создавать бессмысленные пустые реализации всехдругие методы.Поэтому он сохраняет много ненужного кода, особенно при использовании анонимных слушателей событий.Например (взято из здесь )

    someObject.addMouseListener(new MouseAdapter() {
        public void mouseClicked(MouseEvent e) {
            ...//Event listener implementation goes here...
        }
    });
0 голосов
/ 13 февраля 2012

Я знаю, что уже есть принятый ответ на этот вопрос, но этот же вопрос был задан здесь:

MouseAdapter: какой шаблон он использует?

См.для большего количества деталей, но MouseAdapter адаптирует очень понятный интерфейс MouseListener в более удобную форму.

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