2、对象行为
3、测试代码
4、结果
回到正题。
如何实现观察者模式
第一步:我们需要主题,主题就是被观察者,被观察者就是不断在改变自身状态的对象,在程序当中我们经常需要根据某个对象的状态来在不同的地方做相应的操作,比如:
addObsercer()、removeObserver()、notifyObserver()就是Observerable抽象主题类的方法。以下可以看到抽象主题类中有个Observer集合,其作用就是提供一个容器来存放观察者对象,也可以移除。所以继承了这个类就可以对这个集合进行操作,也可以操作集合中的对象的方法。
Observer接口就是抽象观察者了,对象实现了这个接口就相当与是具体观察者。
getMessage()方法是用来被 被观察者 调用的,相当于是观察者收到了通知。
第二步:我们需要观察者,任何需要根据另外一个对象的状态变化而变化的对象,都可以理解为是观察者。
阿珍和田鸡要重当观察者,所以实现了Observer接口,所以都有一个同样的getMessage方法,阿强通过调用阿珍和田鸡的getMessage方法才能让他们两收到通知。
第三步:测试,这里我调用test执行
运行:结果如下
阿强调用gotoPark()方法出门的时候也调用了阿珍和田鸡的getMessage()方法,所以阿珍和田鸡收到了消息,也调用gotoPark出门去公园。
总结:
本质上还是对象A持有另外一个对象B的引用,所以A可以调用B的方法,B对象可以根据传入的参数来做相应的操作。Observer接口和Observerable抽象接口,主要是为了可以让任意对象得到扩展,从而变成观察者或被观察者。
上面的阿强也可以不实现抽象接口,只要在阿强里面添加一个成员变量来表示阿珍,一个成员变量表示田鸡,再对应增加他们的set方法,然后在阿强去公园的时候使用阿珍和田鸡这两个成员变量分别去调用各自的gotoPark方法,也能达到同样的效果。但显然这种方式是比较不灵活的。
by the way:
接口类是能力。
抽象类是本质。
文章均来自互联网如有不妥请联系作者删除QQ:314111741 地址:http://www.mqs.net/post/13762.html
添加新评论