观察者模式,其实就是观察者和被观察者之间的通信。
直接上代码吧,理论先不讲了:
首先定义观察者和被观察者的接口。
观察者里面比较简单,就定义了一个更新数据的接口;
被观察者里面有三个方法,分别是添加观察者,移除观察者,和通知观察者;
观察者实现观察者接口的更新的方法,这里只打印一下接收到的信息。
被观察者分别实现添加,更新和通知观察者三个方法,除此以外,还要写一个集合(List)来存放观察者。构造方法没什么可说的了,添加和删除观察者也就是list的add和remove,最后一个notifyOberver() 这个方法通知观察者,首先遍历一点观察者的List,确保能够通知到每一个观察者,然后调用观察者的update的方法。
最后写一个测试类。
接下里看测试类:
line7,定义一个被观察者,ling9-ling11,添加两个观察者(不要问我为什么一个观察者要搞一个对象去接收,一个却直接new,往后看你就明白了!哈哈!),ling13,通知观察者,然后看输出的打印台,打印台上是不是能够接收到两句被观察者发出的消息,这就对了嘛,因为观察者有两个,说明两个观察者都接收到了被观察者发出的消息。
line15,移除了一个观察者(这里就是为什么前面一个用对像去接收,一个却直接new,因为我直接new的话,就没办法移除了,哈哈!),然后看line17,通知观察者,再看控制台的输出,控制台的输出 "this is message_2!" 是不是只输出了一次,这就对了嘛,因为观察者已经被我移除掉了一个,就只剩下一个了,自然也就只能打印出来一个咯!