Как бы вы реализовали следующую функциональность? Сразу скажу, что код ради интереса пишется в стиле Performance Special Olympics. Различные сканирования в цикле структур данных надо избегать.
Есть некий обьект, у которого есть методы isValid(), invalidate() с очевидным назначением. Ссылка на обьект хранится в куче структур данных. Идея в том, что как только где-то этот обьект сделали invalid, сразу он магическим способом выпилился из всех структур.
Как бы вы делали?
1. Паттерн observer. Минус - регать в самом элементе каждую коллекцию и потом все это дебажить. При удалении элемента в многих коллекциях будет достаточно много сканирования по всей коллекции. Очевидно нельзя удалить 100 таких элементов за один проход.
2. Переписать (наследовать) коллекции так, чтобы они скипали и удаляли инвалидные элементы когда на них наталкиваются. Минус - переписывать и дебажить коллекции. А потом появятся еще какие нибудь хитрые коллекции с неочевидной работой и от них тоже расширяться
3. Написать специальные алгоритмы поиска, итерации и т.д. Чуть лучше пункта 2, потому что используется оборачивание интерфейса, что обеспечивает покрытие большего количества коллекций и не надо имплементить все методы коллекции и следить за их согласованостью.
4. Забить нах, доставать элемент, проверять на валидность и выкашивать ручками от случая к случаю.
5. Ваши идеи