See where Observer-style designs help in Java systems, from UI events and model listeners to domain events and local notification flows.
Observer is strongest when one part of the system changes and several other in-process collaborators may need to react.
Observer is weak when:
Use the simplest notification model that still makes the event semantics explicit.