Java Design Patterns: Observer | Behavioral Design Pattern | Low Level Design (LLD)