您的位置:首页 > 编程语言 > Java开发

用java.util.Observable实现Observer模式

2011-11-16 17:13 387 查看
Observer模式 主要是观察者与被观察者之间的关系

观察者为羊,被观察者为狼 模仿的场景为狼叫羊跑

代码如下:

1.被观察者类
package test.pattern.observer;

import java.util.Observable;

public class Wolf extends Observable{

private String name;

Wolf(String name) {
this.name = name;
}

public void cry(String state){
System.out.println(this.getName()+ " crying ");
this.setChanged();
this.notifyObservers(state);
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

}


2.观察者类
package test.pattern.observer;

import java.util.Observable;
import java.util.Observer;

public class Sheep implements Observer {

private String state = "eating";
private String name;

public Sheep(String name){
this.name = name;
}

public void update(Observable o, Object arg) {
// TODO Auto-generated method stub
Wolf wolf = (Wolf)o;
System.out.println(wolf.getName()+" crying and "+arg+" "+this.getName()+" running.....");
setState("running");
}

public String getState() {
return state;
}

public void setState(String state) {
this.state = state;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

}


3.测试
package test.pattern.observer;

public class TestObserver {

public static void main(String[] args) {
Wolf wolf = new Wolf("wolf1");
Sheep sheep1 = new Sheep("sheep1");
Sheep sheep2 = new Sheep("sheep2");
Sheep sheep3 = new Sheep("sheep3");
//注册观察者,sheep1,sheep2加入,sheep3未加入
wolf.addObserver(sheep1);
wolf.addObserver(sheep2);
String wolfStat = "hungry";
//wolf begin cry
wolf.cry(wolfStat);
}
}


4.结果:

wolf1 crying

wolf1 crying and hungry sheep2 running.....

wolf1 crying and hungry sheep1 running.....
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: