Subject(抽象的被观察对象):定义了注册观察者和删除观察者的方法,还声明了获取现在状态的方法。

Concreteuject(具体的被观察对象):当自身状态发生改变以后,他会通知所有已经注册的Observer角色。

Observer(抽象观察者):负责接收来自Subject角色的状态变化通知,为此声明了update方法

ConcreteObserver(具体的观察者):表示具体的Observer,当它的update方法被调用之后,回去获取要观察对象的最新状态。