The Observer pattern lets UI components subscribe to data changes. When data changes, all subscribed components get notified automatically, avoiding tight coupling and manual checks.
The data changes first in the subject. Then the subject notifies observers. Observers receive the notification and update their UI.
Batching notifications in a centralized event queue and updating asynchronously reduces blocking and improves scalability when many UI components observe data changes.
Observers that are not unregistered can cause memory leaks and complex dependencies, which is a known tradeoff of the Observer pattern.
Each update: 10,000 observers * 2ms = 20,000ms = 20 seconds per change.
For 5 changes per second: 20s * 5 = 100 seconds total, which is more than 1 second available.