Обычно интерфейсы, позволяющие добавлять прослушиватели, также включают метод удаления, например, следующий:
interface SomeInterface {
addListener( Listener)
removeListener( Listener );
}
Это, однако, отстой по нескольким причинам.
- Возможно передатьa Слушатель, который еще не был удален для SomeInterface.removeListener ().
- Также возможно вызвать SI.removeListener (), когда ни один слушатель не зарегистрирован.Нельзя вызывать команду remove до того, как даже выполнить добавление.
- Это также означает, что для удаления на более позднем этапе необходимо сохранять дескриптор как Слушателя, так и ссылки SI.
У меня есть предложение, которое, как мне кажется, работает, решает эти три проблемы, однако я хочу услышать от других учиться на их идеях и предложениях, которые могут быть более изящными, чем мое собственное решение.