How does the Observer pattern fit into SOLID and DI?
Observer supports SRP by separating notification logic from core business logic and DIP by
depending on abstractions (observers). It fits DI because observers can be injected, allowing
flexible runtime subscriptions and loose coupling.