Можешь объяснить паттерн Observer, включая его ключевые компоненты, как он работает и какие проблемы могут возникнуть при его реализации? — ДейлиПреп