Observer模式 主要是观察者与被观察者之间的关系
观察者为羊,被观察者为狼 模仿的场景为狼叫羊跑
代码如下:
1.被观察者类
[java] view plain copy
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.观察者类
[java] view plain copy
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.测试
[java] view plain copy
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…..