Observer solves the "notification problem" — when something changes, how do you tell everyone who cares without hardcoding who those "someones" are? Think of it like a YouTube channel. When a creator posts a new video, they don't personally call every viewer. Instead, viewers subscribe to the channel, and YouTube automatically notifies everyone on the list. The creator doesn't know (or care) who's subscribed — they just publish, and the platform handles delivery.
Without Observer, the code that changes data would have to manually call screen.Update(), logger.Log(), emailer.Send() — and every time you add a new consumer, you'd edit that code again. That's like the creator maintaining a personal phone list and calling each fan individually. Observer flips this: interested parties subscribe themselves, and the broadcaster just says "something changed" to everyone on the list. It only knows the interface, never the specific subscriber types. Adding a new consumer is just adding a new subscriber — zero changes to the publisher.