观察者模式

观察者模式
观察者模式中主要包括两个角色,一个是主题,另一个是观察者。
其中主题用于存放数据、修改数据、观察者注册、观察者移除、通知观察者。
观察者用于从主题中获取新的数据、并将数据进行处理(显示、计算等等)

与订阅报纸类似,报社是主题、,每天都有新的数据信息更新,并且将新的信息通知给观察者(向报社订阅的人)。同时,每个人都可以称为订阅者、或者取消订阅。
由以上描述可知,观察者模式是一对多的关系。

每个具体主题需要实现主题,每个观察者也需要实现观察者接口。具体代码如下:

public interface Subject{
	registerObsevers(Obsever obsever);
	removeObsever(Obsever obsever);
	notifyObsever();
}
public interface Obsever{
	update();
}

以上是主题与观察者接口。以《Head First 设计模式》中气象数据显示的例子为例。具体代码为:

public WebData implements Subject{
	private List<Obsever> obs;
	private int tem;//湿度
	private int data;//其余数据
	public WebData(){
		this.obs = new List<>();
	}
	registerObsevers(Obsever obsever){
		this,obs.add(obsever);
	}
	removeObsever(Obsever obsever){
	 obs.remove(obsever);
	 }
	notifyObsever(){
		for (Obsever o : obs){
			o.update();}
	}
	//以下还有一些数据更新等等的代码,在此不细写
	public void dataUpda(){
		。。。。//data更新等等
		notifyObsever();
	};
}

//观察者代码
public OneObsever implements Obsever{
	private WebData sub;
	private data;
	public OneObsever(WebData webData){
		this.WebData = webData;
	}
	public update(){
	 	this,data = sub.getData();//获得具体观察者类中需要的数据
	 	display(data);//对获取的数据进行相应的处理
	}
	public display();//实现对具体数据进行处理,具体代码不实现
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值