Java观察者设计模式

在java.util包中提供了Observable类Observer接口,使用它们即可完成观察者模式。

多个观察者都在关注着价格的变化,只要价格一有变化,则所有的观察者会立即有所行动。

//=================================================
// File Name       :	Observer_demo
//------------------------------------------------------------------------------
// Author          :	Common

import java.util.Observable;
import java.util.Observer;

// 类名:House
// 属性:
// 方法:
class House extends Observable{
	private float price;

	public House(float price) {
		super();
		this.price = price;
	}

	public float getPrice() {
		return price;
	}

	public void setPrice(float price) {
		super.setChanged();   						//设置变化点
		super.notifyObservers(price);		//通知所有观察者价格改变
		this.price = price;		
	}

	@Override
	public String toString() {
		return "房子价格为:" + this.price;
	}
	
}

//类名:HouseObserver
//属性:
//方法:
class HouseObserver implements Observer{
	private String name;					//观察者的名字
	
	public HouseObserver(String name) {
		super();
		this.name = name;
	}

	@Override
	public void update(Observable o, Object arg) {
		// TODO 自动生成的方法存根
		if(arg instanceof Float){																//判断参数类型
			System.out.println(this.name+"观察到价格改变为");
			System.out.println(((Float)arg).floatValue());
		}
	}
	
}

//主类
//Function        : 	Observer_demo
public class Observer_demo {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		House h = new House(1000000);
		HouseObserver ho1 = new HouseObserver("购房者1");
		HouseObserver ho2 = new HouseObserver("购房者2");
		HouseObserver ho3 = new HouseObserver("购房者3");
		h.addObserver(ho1);				//加入观察者
		h.addObserver(ho2);
		h.addObserver(ho3);
		System.out.println(h);			//输出房子的价格
		h.setPrice(666);						//修改房子的价格
		System.out.println(h);			//输出房子的价格
	}

}
原文地址:https://www.cnblogs.com/tonglin0325/p/5270965.html