java观察者模式

本文介绍了一种常用的设计模式——观察者模式,并通过具体实例展示了如何使用该模式来实现对象之间的依赖关系。文中提供了完整的Java代码示例,包括主体类、观察者接口及具体的观察者实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

观察者模式:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖它的对象都得到通知并自动更新。

package observer; public interface Subject { public void register(Observer observer); public void remove(Observer observer); public void notifiedObserver(); } public interface Observer { public void update(float temp, float humidity, float pressure); } public class WeatherDate implements Subject { private float temp; private float humidity; private float pressure; private List list = null; public WeatherDate() { list = new ArrayList(); } public void register(Observer observer) { list.add(observer); } public void remove(Observer observer) { int i = list.indexOf(observer); if (i >= 0) { list.remove(i); } } public void notifiedObserver() { for (int i = 0; i < list.size(); i++) { Observer observer = (Observer) list.get(i); observer.update(temp, humidity, pressure); } } public void changeDate() { notifiedObserver(); } public void setMeasure(float temp, float humidity, float pressure) { this.temp = temp; this.humidity = humidity; this.pressure = pressure; changeDate(); } } public class CurrentConditionsDisplay implements Observer { private float temp; private float humidity; private float pressure; private WeatherDate wd ; public CurrentConditionsDisplay(WeatherDate wd){ this.wd = wd; wd.register(this); } public void update(float temp, float humidity, float pressure) { this.temp = temp; this.humidity = humidity; this.pressure = pressure; display(); } public void display(){ System.out.println("CurrentConditionsDisplay------>temp : " + temp + " humidity : " + humidity + " pressure : " + pressure); } } public class YesterdayConditionDisplay implements Observer { private float temp; private float humidity; private float pressure; private WeatherDate wd ; public YesterdayConditionDisplay(WeatherDate wd){ this.wd = wd; wd.register(this); } public void update(float temp, float humidity, float pressure) { this.temp = temp; this.humidity = humidity; this.pressure = pressure; display(); } public void display(){ System.out.println("YesterdayConditionDisplay------>temp : " + temp + " humidity : " + humidity + " pressure : " + pressure); } } public class WeatherStation { public static void main(String[] args) { WeatherDate weatherdate = new WeatherDate(); CurrentConditionsDisplay condition = new CurrentConditionsDisplay( weatherdate); YesterdayConditionDisplay ycd = new YesterdayConditionDisplay(weatherdate); weatherdate.setMeasure(80, 65, 70); } }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值