您的位置:首页 > 其它

设计模式系列--观察者模式基本

2015-06-27 19:15 405 查看
观察者模式属于设计模式中的行为型模式,也叫发布-订阅模式,实际上是一种事件监听机制。

基本思想是:有观察者和被观察者两种角色,当被观察者的行为有变化的时候(方法被调用),观察者就能被通知到。想成为被观察者的观察者,需要在被观察者那里登记。

角色

Watcher(观察者接口)

ConWatcher(具体观察者)

Watched(被观察者接口)

ConWatched(具体被观察者)

代码

观察者抽象

public interface Watcher {
//被通知的方法
public void update();
}


具体观察者

public class ConWatcher implements Watcher{

@Override
public void update() {
System.out.println(this+"被通知了");
}

}


被观察抽象

public interface Watched {
public void attach(Watcher w);
public void detach(Watcher w);
public void notifyWatcher();
}


具体被观察者

public class ConWatched implements Watched{
List<Watcher> list = new ArrayList<Watcher>();
/**
* 观察者需要在被观察者那里登记
*/
@Override
public void attach(Watcher w) {
list.add(w);
}

@Override
public void detach(Watcher w) {
list.remove(w);
}
/**
* 通知所有观察者
*/
@Override
public void notifyWatcher() {
for(Watcher w:list){
w.update();
}
}
/**
* 被观察的事件
*/
public void change(){
this.notifyWatcher();
}
}


测试

public class Client {
public static void main(String[] args) {
ConWatched zhangsan=new ConWatched();//被观察者
Watcher watcher1 = new ConWatcher();//观察者
Watcher watcher2 = new ConWatcher();
zhangsan.attach(watcher1);//到观察者那里登记
zhangsan.attach(watcher2);
zhangsan.change();//被观察者变化了
}
}


运行结果:

com.pattern.Observe.one.ConWatcher@9945ce被通知了
com.pattern.Observe.one.ConWatcher@b5dac4被通知了


由此可见,两个观察对象都被通知了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  模式 设计模式