您的位置:首页 > 移动开发 > Android开发

设计模式之观察者模式

2015-11-03 22:38 357 查看
在一个系统中,模块与模块、类与类之间都是相互关联的,一种很常见的情况是,当有某种状态发生变化时,其他的几个模块或者几个类也进行相应变化。(突然想到了android的广播机制,怀疑广播功能的实现也是用这种模式)

观察者模式就是用来满足这种需求,并让类与类之间松耦合的。简单的说,观察者需要向被观察者注册,表示我希望监听被观察者的某种状态,当状态变化的时候请主动通知我。

因此在实现时,被观察者需要维护一个观察者的列表,当被观察者的状态发生变化时,依次调用被观察者的函数。于是类的结构也就很明显了,主要由四个部分组成:IObserver,concreteObserver,

Subject,concreteSubject;
Interface IObserver{
public void update();
}
class concreteObserver implements IObserver{
public void update(......){
,..............
}
}
class Subject{
List<IObserver> list = new ArrayList<>();
public void attach(IObserver observer){//注册新的观察者
list.add(observer);
}
public void detach (IObserver observer){
list.remove(observer);//移除观察者
}
public void notify(){
for(IObserver observer:list){
observer.update(....);
}
}
}

class ConcreteSubject extends Subject{
。。。。
public void change(){
...
notify();//通知所有的观察者
}
}


以上就是整个的代码结构。

上述代码中,当被观察者发生变化时,它将全部信息发给每个观察者,好像是它知道每个观察者都需要的东西,这种有点像推送模型,不管需不需要都推出去。还有一种方式是拉取,就是观察者可以根据自己的需求来获取内容,解决方案就是:将update(…..)中改为update(this);也就是将整个的被观察者对象都发送给观察者。

在Java里面,集成了对观察者模式的支持,请参考Observer接口和Observable类。

但这里面还存在一个问题:就是观察者都要有一个update()方法,那如果没有这个方法呢?但是也需要进行监听处理?据说存在一种事件的机制,,我没有搞懂。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  设计模式 android