观察者设计模式浅谈

这里并非具体的分析观察者设计模式,仅仅是提供一个观察者模式的入门,主要是了解观察者设计模式的作用以及使用Observable类与Observer接口实现观察者模式

一.什么是观察者设计模式?

《设计模式》一书对Observer是这样描述的:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知并自动更新,下面看一个例子:现在很多的购房者都在关注着房子的价格变化,每当房子价格变化的时候,所有的购房者都可以观察得到。这里的购房者都属于观察者,他们都在关注着房子的价格


二.观察者模式实现

java.util包中提供了Observable类和Observer接口,使用他们可以完成观察者模式

需要被观察得类必须继承Observable类,public class Observable extends Object     

Observable类的常用方法如下:


然后每个观察者类都需要实现Observer接口,Observer接口定义如下:

public interface Observer{
	void update(Observable o,Object arg);
}
此接口中只定义了一个update方法,第一个参数表示被观察者实例,第二参数表示修改的内容

代码:观察者模式的实现

import java.util.Observable;
import java.util.Observer;
class House extends Observable{
	private float price;
	public House(float price){
		this.price = price;
	}
	public void setPrice(float price){
		super.setChanged();	//设置变化点
		super.notifyObservers(price);	//通知所有观察者价格改变
		this.price = price;
	}
	public float getPrice(){
		return price;
	}
	public String toString(){
		return "房子价格为:"+this.price;
	}
}
class HousePriceObserver implements Observer{
	private String name;
	public HousePriceObserver(String name){
		this.name = name;	
	}
	public void update(Observable obj,Object arg){
		if(arg instanceof Float){	//判断参数类型
			System.out.print(this.name+"观察到价格更改为:");
			System.out.println(((Float)arg).floatValue());
		}	
	}
}
public class ObserverDemo{
	public static void main(String[] args){
		House h = new House(100000);
		HousePriceObserver hpo1 = new HousePriceObserver("购房者A");
		HousePriceObserver hpo2 = new HousePriceObserver("购房者B");
		HousePriceObserver hpo3 = new HousePriceObserver("购房者C");
		h.addObserver(hpo1);
		h.addObserver(hpo2);
		h.addObserver(hpo3);
		System.out.println(h);	//输出房子价格
		h.setPrice(66666);	//修改房子价格
		System.out.println(h);
	}
}

参考资料:李兴华java视频

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值