java设计模式---观察者设计模式

观察者模式定义:


如果想实现观察者模式,则必须依靠java.util包中提供的Obeservable类和Observer接口。

Observer接口:此接口有一个update方法,当观察的事物发生变化就调用此方法。

Obeservable类:

------》addObserver方法:增加一个观察者

------》deleteObserver方法:删除一个观察者

------》setChanged方法:标记观察者状态

------》nitifyObservers方法:通知观察者发生变化。

package 观察者设计模式;

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

public class Demo1  {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		House h = new House(1000000);
		HousePriceObserver hpo1 = new HousePriceObserver("购房者A");
		HousePriceObserver hpo2 = new HousePriceObserver("购房者B");
		HousePriceObserver hpo3 = new HousePriceObserver("购房者C");
		h.addObserver(hpo3);
		h.addObserver(hpo2);
		h.addObserver(hpo1);
		System.out.println(h);//输出房子价钱
		h.setPrice(222222);
	}

}
class House extends Observable {
	private float price;
	
	
	public House(float price) {
		this.price = price;
	}
	public float getPrice() {
		return this.price;
	}
	public void setPrice(float price) {
		//每次设置价格的时候,也就是价格变化的时候要通知观察者
		this.price = price;
		System.out.println("当前的价格变为: " + this.price);
		setChanged();
		notifyObservers();
		
	}
	public String toString(){
		return "房子价钱为:" + this.price;
	}
}
class HousePriceObserver implements Observer{
	private String name;
	
	public HousePriceObserver(String name) {
		super();
		this.name = name;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public void update(Observable o, Object arg) {
		
		House h = (House) o ;
		System.out.print(this.name + "观察到价格更改为:");
		System.out.println(h.getPrice());
	}
	
}








总结:

在Observer接口中的update方法里面的两个参数:
o:具体表示发出通知的Observable类的对象。即表示哪个被观察者发出了通知。
arg:需要被观察的内容。


被观察者即可被观察的对象 就是继承于Observable的类。其中发送通知时一定调用super.setChanged()方法和notifyObservers(XXX)方法。


此设计模式是Java本身的机制,不使用Observer接口和Observable类也是可以实现的,但是比较复杂。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值