JDK自带的观察者模式

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();

notifyObservers(Object arg);

这两句代码就可以实现通知其观察者了。






猜你喜欢

转载自blog.csdn.net/qq_34310242/article/details/79178335
今日推荐