实例

//java实现观察者模式编程
import java.util.HashSet;

public class ObserverPattern {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Product p = new Product("java<java核心技术>", 103.00);	//创建一个商品
		Observer o1 = new WebObserver();					//第一个观察者
		Observer o2 = new MailObserver();					//第二个观察者
		p.addObserver(o1);        						//注册观察者1
		p.addObserver(o2);        						//注册观察者1
		System.out.println("===第一次价格改动===");
		p.setPrice(80);								//修改商品价格
		o1.unreg(p);								//观察者1取消观察
		System.out.println("===第二次价格改动===");
		p.setPrice(100);							//再次修改商品价格
	}

}

interface Observer{							//观察者接口
	public void update(Product p);			//价格修改的接口方法
	public void unreg(Product p);			//撤销注册
}

class WebObserver implements Observer{		//Web观察者
	public void update(Product p) {		//定义回调方法
		System.out.println("更新页面价格:"+p.getName()+":"+p.getPrice());
	}
	public void unreg(Product p) {
		p.getObservers().remove(this);		//去掉本观察者
	}
}

class MailObserver implements Observer{		//E-mail观察者
	public void update(Product p) {			//定义回调方法
		System.out.println("为所有会员发送价格变化信息"+p.getName()+":"+p.getPrice());
	}
	public void unreg(Product p) {
		p.getObservers().remove(this);		//去掉本观察者
	}
}

//产品类
class Product{								//被观察者
	private double price;					//价格
	private String name;					//商品名称
	private HashSet<Observer> observers;	//保存所有的观察者
	//构造方法
	public Product(String name, double price) {
		// TODO Auto-generated constructor stub
		this.name = name;
		this.price = price;
		observers = new HashSet<Observer>();
	}
	public void addObserver(Observer ob) {		//添加观察者
		observers.add(ob);
	}
	//通知监听者执行update()方法
	public void notifyObserver() {
		for (Observer ob : observers) {
			ob.update(this);				//回调所有观察者的观察方法
		}
	}
	public double getPrice() {
		return price;
	}
	public void setPrice(double price) {
		this.price = price;
		//当价格被改变的时候就通知观察者
		notifyObserver();
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public HashSet<Observer> getObservers() {
		return observers;
	}
	public void setObservers(HashSet<Observer> observers) {
		this.observers = observers;
	}	
}

运行实例 »

点击 "运行实例" 按钮查看在线实例