分享

18. 观察者模式

 黎可图书馆 2013-09-11
一. 概念
Observer(观察者模式):定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动刷新。

二. 角色
抽象主题(Subject)角色:主题角色把所有对观察者对象的引用保存在一个聚集里,每个主题都可以有任何数量的观察者。
抽象观察者(Observer)角色:为所有的具体观察者定义一个接口,在得到主题的通知时更新自己。
具体主题(ConcreteSubject)角色:将有关状态存入具体观察者对象,在具体主题的内部状态改变时,给所有登记过的观察者发出通知。
具体观察者(ConcreteObserver)角色:存储与主题的状态自恰的状态。

三. 实现
由于java提供了观察者模式的实现,这里就直接使用java的Api来实现,这里模拟家长对孩子下达命令。

Test.java
public class Test {
public static void main(String[] args) {
Mother m = new Mother();
Children c1 = new Children(m);
Children c2 = new Children(m);
m.setInfo("死孩子,回家吃饭!");
m.setInfo("快去写作业!");
m.setInfo("快去写作业!");
m.setInfo("快去睡觉 !");
}
}
这里Mother是具体主题角色,Children是具体观察者角色。

Children.java
public class Children implements Observer {

public Children(Mother m){
m.addObserver(this);
}
@Override
public void update(Observable o, Object arg) {
String info = ((Mother)o).getInfo();
System.out.println("已经收到命令:" + info);
}

}
实现了Observer接口,是具体观察者角色。

Mother.java
public class Mother extends Observable {
private String info = "";

public String getInfo() {
return info;
}

public void setInfo(String info) {
if(!this.info.equals(info)){
this.info = info;
setChanged();
}
notifyObservers();
}
}
继承了Observalbe类,是具体主题角色。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多