this pattern is used when we want to notify the changes of internal state of a class to other registered class
- Publisher - class that have state that when its change other concreteobserver class will notify
- ConcreteSubscriber - classes that registered in Publisher and will notify the changes of its state
- ConcreteState - class that take action on request diffrently from another concretestate class
- Subscriber - contains update method
image by refactoring guru