added an abstract class Observer