观察者模式浅谈篇(三)

观察者模式浅谈篇(三)

    这一篇是观察者模式结尾篇,主要讲解Java.utils.Observer(Java内置观察者模式)运作方式

方法介绍:

  • addObserver(Observer observer)增加观察者
  • deleteObserver(Observer observer)删除观察者[还有一个deleteObserver()方法没有形参]
  • notifyObserver()通知观察,这个用于观察者从主题对象(可观察者对象)拉数据。
  • notifyObserver(Object arg)通知观察者并更新数据。

  • Update(Observer o,Object arg)Observer主题对象本身,好让观察者知道是哪个主题。Object传入的数据对象。
具体代码实现我还是使用第一篇我的需求:天气预报(当天气数据更新后,用户界面需要实时展示)
可观察模式对象逻辑代码:
package com.example.observerjavatextdemo;

import java.util.Observable;

//主题对象:当有了新的数据产生 立即通知观察者
public class WeatherData extends Observable{
	private float temperature;
	private float humidity;
	private float pressure;

	public WeatherData() {
	}

	public void measurementsChanged() {
		setChanged();//在notifyObservers()方法前调用setChanged()是标记数据已经更改
		             //【这个方法后面也可以做过滤用eg:不要立马通知过多长时间在设置为数据已更新】观察者可以用hasChange判断是否更新
		notifyObservers();//这里使用notifyObservers()方法主要是用于观察者拉数据,而不是一有数据就通知观察者
		                  //不管观察者是否需要
	}

	public void setMeasurements(float temperature, float humidity,
			float pressure) {
		this.temperature = temperature;
		this.humidity = humidity;
		this.pressure = pressure;
		measurementsChanged();
	}

	public float getTemperature() {
		return temperature;
	}

	public float getHumidity() {
		return humidity;
	}

	public float getPressure() {
		return pressure;
	}

}
观察者模式逻辑代码:
package com.example.observerjavatextdemo;

import java.util.Observable;
import java.util.Observer;
//观察者对象
public class CurrentConditionDisplay implements Observer {
	public Observable observer;
	private float temperature;
	private float humidity;

	public CurrentConditionDisplay(Observable observer) {
		System.out.println("CurrentConditionDisplay()");
		this.observer = observer;
		this.observer.addObserver(this);
	}

	//当数据更新 会自动调用这个方法【前提是观察者调用了addObserver()这个订阅方法】
	public void update(Observable arg, Object arg1) {
		System.out.println("update()");
		if (arg instanceof WeatherData) {
			WeatherData weatherDate = (WeatherData) arg;
			humidity = weatherDate.getHumidity();//这样就是拉数据
			                                     //因为我们调用的是notifyObservers()无参,故Object为空
			temperature = weatherDate.getTemperature();
			display();
		}
	}

	public void display() {
		System.out.println("display() this.temperature:" + temperature
				+ " ,this.humidity:" + humidity);
	}
}
测试类代码:
package com.example.observerjavatextdemo;

public class WeatherStation {
	public static void main(String[] args) {
		WeatherData weatherData = new WeatherData();
		CurrentConditionDisplay currentCondition = new CurrentConditionDisplay(weatherData);
		weatherData.setMeasurements(80, 65, 30.4f);
	}
}
打印结果:

上面是采用的是拉数据,当根据业务需要,需要push数据时,中调用notifyObservers(数据源),Observer端中update(Observable arg, Object arg1) 对该数据转型就行了。
                                                                                                                                                                                                                                                                                                                    
Java内置观察者模式使用如以上介绍方法,这里我总结我讲解的三篇观察者模式:                              
观察者模式定义:在对象中定义一对多的依赖,当一个对象改变状态,依赖它的对象都会收到通知自动更新。   
这里的“一”就是可观察者(主题对象)这里的“多”就是观察者,“依赖”就是观察者与主题对象建立注册关系。
这样主题对象变化,观察者就可以实时收到更新数据。
跨进程观察者模式:使用只要主要观察者模式的注册与解除注册传输到服务端对象相同就可以。
Java内置观察模式:使用简单,可以实现“拉”数据,“推”数据两种方式。但是不易于松耦合。因为采用的是继承而不是接口。
各位读者可以根据不同的需求使用不同的观察者模式,这样代码逻辑清晰而且后期好维护。

                                                                                                      

谢谢品读!!






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 智慧社区背景与挑战 随着城市化的快速发展,社区面临健康、安全、邻里关系和服务质量等多方面的挑战。华为技术有限公司提出智慧社区解决方案,旨在通过先进的数字化技术应对这些问题,提升城市社区的生活质量。 2. 技术推动智慧社区发展 技术进步,特别是数字化、无线化、移动化和物联化,为城市社区的智慧化提供了可能。这些技术的应用不仅提高了社区的运行效率,也增强了居民的便利性和安全性。 3. 智慧社区的核心价值 智慧社区承载了智慧城市的核心价值,通过全面信息化处理,实现对城市各个方面的数字网络化管理、服务与决策功能,从而提升社会服务效率,整合社会服务资源。 4. 多层次、全方位的智慧社区服务 智慧社区通过构建和谐、温情、平安和健康四大社区模块,满足社区居民的多层次需求。这些服务模块包括社区医疗、安全监控、情感沟通和健康监测等。 5. 智慧社区技术框架 智慧社区技术框架强调统一平台的建设,设立数据中心,构建基础网络,并通过分层建设,实现平台能力及应用的可持续成长和扩展。 6. 感知统一平台与服务方案 感知统一平台是智慧社区的关键组成部分,通过统一的RFID身份识别和信息管理,实现社区服务的智能化和便捷化。同时,提供社区内外监控、紧急救助服务和便民服务等。 7. 健康社区的构建 健康社区模块专注于为居民提供健康管理服务,通过整合医疗资源和居民接入,实现远程医疗、慢性病管理和紧急救助等功能,推动医疗模式从治疗向预防转变。 8. 平安社区的安全保障 平安社区通过闭路电视监控、防盗报警和紧急求助等技术,保障社区居民的人身和财产安全,实现社区环境的实时监控和智能分析。 9. 温情社区的情感沟通 温情社区着重于建立社区居民间的情感联系,通过组织社区活动、一键呼叫服务和互帮互助平台,增强邻里间的交流和互助。 10. 和谐社区的资源整合 和谐社区作为社会资源的整合协调者,通过统一接入和身份识别,实现社区信息和服务的便捷获取,提升居民生活质量,促进社区和谐。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值