The Observer Pattern defines one-to-many dependency between objects so that when one Object changes the state, all of its dependents are notified and updated automatically.
The Decorator Pattern attaches additional responsibilities to an object dynamically. Decorators provide a flexible alternative to subclassing for extending functionality.