观察者模式

 当一个对象的改变需要同时改变其它多个对象,特别是不知道具体有多少对象时,可以考虑使用观察者模式。

 观察者模式中有两个角色,一个是通知者,一个是被通知者。通知者类必须有三个方法,添加被通知者方法,删除被通知者方法,通知方法,必须有一个属性,用于保存通知者,通常是个数组类型。添加和删除方法直接对数组进行添加和删除操作。而通知方法里会使用一个遍历,让所有保存在数组中的被通知者调用某个方法,也就是通知它们做出反应。被通知者类必须实现一个方法,就是用于被通知时做出的反应的方法,这个方法事实上是要被通知者类的通知方法调用的。目前为止,还只是通知者单方面地对被通知者进行通信。如何让被通知者得到通知者新的状态呢?通过对被通知者类的构造函数传入通知者对象,从而让被通知者可以得到通知者对象的状态。因为对于对象类型来说,用的是传址方式,所以,在被通知者的反应方法中,如果通知者状态发生了变化,被通知者是可以随时得到新的状态的。

 也就是说,通知者通过添加和删除被通知者,将通知者列表保存在自己的属性中,在通知方法是遍历实现通知每个被通知者;而被通知者通过在构造函数中被传到通知者,从来和通知者建立通信,得到通知者变化的新状态。通知者和被通知者双向耦合着。

posted on 2008-09-17 18:19  真阿当  阅读(113)  评论(0编辑  收藏  举报