Jdk提供了一个类Observable(用于支持被观察者),一个接口(用于支持观察者)。观察者类实现Observer接口,被观察者继承Observable类就可以很方便地实现观察者模式了。代码如下。
1:新建一个观察者类:student 其要实现Observer接口
/**
* <h3>观察者类</h3>
* 创建日期: 2018年1月25日
* @author zhaosq
*/
public class Student implements Observer{
private String name;
public Student(){}
public Student(String name){
this.name = name;
}
/**
* 球队信息发生变化时发出此通知
*/
@Override
public void update(Observable o, Object arg) {
if(o instanceof Team){
System.out.println(((Team) o).getName()+"获得了"+((Team) o).getScore());
}else{
System.out.println("观察了一个非 team 对象");
}
}
}
2:新建一个被观察者类:Team 其要继承类Observable
/**
* <h3>被观察者类</h3>
* 创建日期: 2018年1月25日
* @author zhaosq
*/
public class Team extends Observable{
/**
* 球队名称
*/
private String name;
/**
* 球队得分
*/
private int score;
public Team(){}
public Team(String name){
this.name = name;
}
public Team(String name,int score){
this.name = name;
this.score = score;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
setChanged(); //这两段代码很重要是实现观察这模式的核心
notifyObservers(LocalDate.now());
}
}
3:新建一个测试类
public class Test{
public static void main(String[] arg){
Team team = new Team("骑士队");
Student student = new Student("zsq");
team.addObserver(student);
team.setScore(98);
}
}
当被观察者发生改变时 调用
setChanged();
这两句代码就可以实现通知其观察者了。