现在的位置: 首页 > 综合 > 正文

观察者模式

2017年09月24日 ⁄ 综合 ⁄ 共 1188字 ⁄ 字号 评论关闭

很明显这个模式中有两个对象:observer(观察者) observable (被观察者)

(1) observer是接口,observable是抽象类。

比如我要观察一个商品bean,这个商品类可以继承Observerable如下:

public class ProductBean extends Observable{
	
	private String name;
	private float  price;
	
	
	public ProductBean() {
		super();
	}
	
	
	public ProductBean(String name, float price) {
		super();
		this.name = name;
		this.price = price;
	}


	public String getName() {
		return name;
	}
	
	
	public void setName(String name) {
		this.name = name;
		setChanged();                  // 设置changed = true;
		notifyObservers();             // 通知所有的观察者
		
	}
	public float getPrice() {
		return price;
	}
	
	
	public void setPrice(float price) {
		this.price = price;
		setChanged();
		notifyObservers();
	}


	@Override
	public String toString() {
		return "ProductBean [name=" + name + ", price=" + price + "]";
	}

(2)再定义一个观察者,如下:

public class MyObserver implements Observer{

	private ProductBean observable;
	
	@Override
	public void update(Observable o, Object arg) {
		
		observable = (ProductBean)o;
		System.out.println(observable.toString());
	}

}

(3)现在观察者和被观察者都有了,那么他们是怎样通信的呢?

是这样的:

public class MainTest {
	
	public static void main(String[] args) {
		
		ProductBean observable = new ProductBean();
		
		MyObserver   observer = new MyObserver();
		observable.addObserver(observer);
		
		observable.setName("name2");
		
//		System.out.println();
		
	}
}

其实就是调用observerable的addObserver(Observer observer)这样观察者和被观察者就联系了起来。被观察者数据一发生变化之后就会调用observer的update()。


抱歉!评论已关闭.