Java系列之观察者模式的实现(一)

在 Java 中,观察者模式是一个很重要的设计模式,在这篇文章中,我们来简单了解一下如何利用 Java 语言的特性来实现
一个简单的观察者模式。

Java 中的 Obserable 与 Observer

在 Java SE 中,有一个 Observer 接口和一个 Observer 类。在 api 文档中,描述如下:

  • Observer 一个类实现乐这个接口之后,被观察的对象如果有改变,那么这个类就可以接收到通知。实现这个接口必须要实现 update 方法。
  • Obserable 这个类代表一个可观察的对象,或者 model 层的一个实例,可以被认为是想被观察的对象的一个子类。一个可观察的对象可以有多个观察者。

实现简单的观察者模式

首先需要定义一个可观察的对象,这个对象中有一个 data 变量,这个变量在被改变的时候会通知到观察者:

public class ObservableObject extends Observable{

	int data = 0;
	
	public void changeData(int change) {
		data = change;
		this.setChanged(); //标记对象被改变
		this.notifyObservers();  //通知所有的观察者
	}
}

定义观察者,观察者在接收到被观察者的改变之后,会将改变的值打印出来:

public class ObserverObject implements Observer {

	@Override
	public void update(Observable o, Object arg) {
		ObservableObject oo = (ObservableObject) o;
		
		System.out.println("被观察者的数据被修改为:"+ oo.data);
	}

}

测试:

public class Main {

	public static void main(String[] args) {
		ObservableObject observableObject = new ObservableObject();
		ObserverObject observerObject = new ObserverObject();
	
		observableObject.addObserver(observerObject);
		observableObject.changeData(1);
		observableObject.changeData(-100);
		
		observableObject.deleteObserver(observerObject); //移除观察者
		observableObject.changeData(200);
	}
}

运行结果为:

被观察者的数据被修改为:1
被观察者的数据被修改为:-100

需要注意的是只打印了两个结果,是因为在第三次改变之前将观察者移除了,这样造成的结果是被观察者的改变将不能通知到被移除的观察者。

©2024 Rayjun    PowerBy Hexo