Запутанное использование шаблона адаптера в пакете java.awt.event и нарушение принципа разделения интерфейса ( ISP)
Использование Adapter patttern в пакете java.awt.event меня смущает. На первый взгляд кажется очевидным нарушение принципа разделения интерфейса ( ISP).
Как и класс MouseMotionAdapter, реализует MouseMotionListener, но предоставляет реализацию NIL для обоих переопределенных методов.
Это как раз то, что является нарушением провайдера? Если говорить о ISP, MouseMotionListener будет скорее разделен на два отдельных интерфейса, по одному для поведения moseDragged и moveMoved?
Возможно, разделение интерфейсов таким образом приведет к спиральному увеличению количества интерфейсов, а также сделает кодирование более неэлегатным, поскольку каждому классу реализации потребуется реализовать большое количество интерфейсов.
Просто нужны пояснения, если мои аргументы оправданы?
1 ответ
Это не является нарушением ISP.
Короткая версия: вы думаете только о той части системы, в которой вы пишете код обработки. Вы не думаете о том, где генерируются события (все в одном месте, код мониторинга мыши), а также о коде регистрации этих событий.
Длинная версия: подумай о том, как MouseEvent
s, вероятно, генерируются. В Java есть класс, который отслеживает активность мыши, в конечном итоге на собственном уровне, и генерирует события соответственно. Все MouseListener
S находятся в цепочке слушателей мультикастера. Если вы хотите прослушать несколько видов событий мыши, вы должны сделать отдельный регистрационный вызов для слушателя каждого типа событий мыши. Вы должны быть частью любой мультикастерной цепочки. И затем, все классы, которые генерируют эти MouseEvent
Необходимо убедиться, что события передаются в соответствующий тип события слушателя, что означает, что вам нужно иметь новое событие Queue
для каждого типа мероприятия - если вы не хотите иметь большой instanceof
цепей.
Или, альтернативно, вы можете просто объединить их в один MouseListener
интерфейс, и пусть ваш класс ничего не делает, когда происходит событие, которое вас не волнует. Это добавляет немного дополнительного кода, если вы не можете расширить MouseAdapter
класс или вообще ничего, если можешь. Преимущества в остальной части системы более чем перевешивают те немногие дополнительные { }
методы.