Implemented Observer pattern
Implemented Strategy pattern