一、观察者模式
观察者模式就是其实就是发布订阅模式,发布者发布消息后,订阅者就可以就可以得到消息通知。
观察者模式设计
发布者
抽象的观察者
具体的观察者
有一个气象站,多个观察者订阅天气预报,气象站会向已订阅的观察者订阅天气预报。
①天气信息
package k;
public class WeatherData {
//温度
private int temperature;
//风力
private int windPower;
public WeatherData(int temperature, int windPower) {
this.temperature = temperature;
this.windPower = windPower;
}
public int getTemperature() {
return temperature;
}
public void setTemperature(int temperature) {
this.temperature = temperature;
}
public int getWindPower() {
return windPower;
}
public void setWindPower(int windPower) {
this.windPower = windPower;
}
}
②观察者(天气接受者)
package k;
//一个接口,抽象的观察者,所有实现该接口的类的对象都是观察者,如 “墨迹天气”APP
public interface WeatherObserver {
//观察者接收气象台发布的数据
void update(WeatherData data);//接口不会定义方法的具体内容
//WeatherData data中data引用的是WeatherData类一个对象
}
//具体的观察者
class RealObserver implements WeatherObserver{
//观察者的名字
private String name;//新添一个属性
public RealObserver(String name) {
this.name=name;
}
//当气象数据传递进来以后,在控制台输出气象数据
public void update(WeatherData data) {
System.out.println(name +"收到天气数据");
System.out.println("温度:"+data.getTemperature());
System.out.println("风力:"+data.getWindPower());
}
}
③气象站
package k;
public class WeatherStation {
//定义一个数组,来保存注册的观察者
private WeatherObserver[] observers=new WeatherObserver[10];//最多注册10个
private int count =0;//已注册观察者数量
//注册观察者
public void register(WeatherObserver observer) {
if (count>=10) {
System.out.println("人数已达到限制");
}else {
observers[count]=observer;
count++;
}
}
//发布数据,通知观察者
public void notifyObserver(WeatherData data) {
//逐个通知观察者
for(int i=0;i<=count ;i++) {
//调用观察者的update方法,传递天气数据
observers[i].update(data);
}
}
}
④执行
package k;
public class day1405 {
public static void main(String[] args) {
WeatherStation ws=new WeatherStation();
WeatherObserver o1=new RealObserver("观察者1");
//接口类型的变量去引用类的实例
WeatherObserver o2=new RealObserver("观察者2");
WeatherObserver o3=new RealObserver("观察者3");
WeatherObserver o4=new RealObserver("观察者4");
WeatherObserver o5=new RealObserver("观察者5");
ws.register(o1);
ws.register(o2);
ws.register(o3);
ws.register(o4);
ws.register(o5);
WeatherData data =new WeatherData(30,2);
ws.notifyObserver(data);
}
}
本文介绍Java中的观察者模式,它属于发布订阅模式的一种。在该模式中,发布者发布消息时,订阅者能接收到通知。文章将详细讨论观察者模式的设计,包括发布者、抽象观察者和具体观察者的角色,并通过一个气象站与多个天气预报观察者的例子进行说明。
2090

被折叠的 条评论
为什么被折叠?



