Отличный вопрос!
Я могу понять, почему один респондент указал Null Object, поскольку есть некоторые концептуальные сходства. Мне очень нравится этот ответ. Но в Null Object это действительно устраняет необходимость постоянно проверять NULL, как в:
if (obj != null)
obj.DoSomething();
И вы делаете это путем создания объекта-заглушки, который переопределяет DoSomething () с реализацией без операции. Разница для меня в том, что цель совершенно иная. Если я вижу нулевой объект (по имени или в документах), я ожидаю, что он должен реализовывать ВСЕ операции без операции. Я бы никогда не ожидал, что класс унаследует от Null Object. На самом деле, на мой взгляд, они должны быть запечатаны.
Я не думаю, что Adapter - это плохо, поскольку Adapter намеревается адаптировать (изменить) несовместимый или неподходящий интерфейс в формат, который можно использовать или использовать. Это определенно цель MouseAdapter. Интерфейс MouseListener действительно плохой, и MouseAdapter преобразует этот интерфейс в нечто более удобное для использования.
Во что оно вписывается? Я бы сказал, шаблон шаблона. В частности, он преобразует методы реализации интерфейса в «операции подключения». Операция ловушки - это метод, который существует для переопределения в подклассе, обычно реализуется как неоперативный и вызывается базовым классом. (Концептуально, я думаю, это нулевой метод вместо нулевого объекта). Они существуют как точки расширения, и именно так они используются в этом случае.