设计模式--观察者模式

观察者模式 又叫 发布--订阅模式,这个叫法比较恰当。

订阅者订阅某内容,若内容做出改变,这推送给每位订阅了的用户。

这是一种 一对多的 依赖关系。主题对象的在状态上发生变坏,会通知所有的观察者。

在学习观察者模式是,遇到一个新词, 低耦合。

 低耦合:

及减少对象与对象的之间的链接。但同时不能忽略必要的链接,耦合对象间能够维持协调一致。

以后应该会对低耦合有更深的了解。

推送模型:

不知道观察者需要什么数据,把全部数据都推送出去。

import java.util.ArrayList;

public class Weather implements Subject {
	public ArrayList<Observer> observers = new ArrayList<Observer>();
	public double tempertaure;
	
	
	public void setTempertaure(double tempertaure) {
		this.tempertaure = tempertaure;
		notifyObervers();
	}

	@Override
	public void regisyOberver(Observer observer) {
		observers.add(observer);
	}

	@Override
	public void removeOberver(Observer observer) {
		if (observers.contains(observer)) {
			observers.remove(observer);
		}
	}
	
	@Override
	public void notifyObervers() {
		for (Observer observer : observers) {
			observer.update(tempertaure);
		}
	}

}

public class Condition implements Observer{
	private double temperature;

	@Override
	public void update(double tempertaure) {
		this.temperature = tempertaure;
	}

}

拉模型:

把自己整个对象传出去,需要的数据自己 get 获取

import java.util.Observable;

public class WeatherData extends Observable {

	private double temperature;

	public WeatherData() {

	}
	
	public void menasuermentChaged(){
		setChanged();
		notifyObservers("hello");
	}

	public void setMeasurements(double temp) {
		this.temperature = temp;
		menasuermentChaged();
	}

	public double getTemperature() {
		return temperature;
	}
	
}

import java.util.Observable;
import java.util.Observer;

public class CurrentConditionsDisplay implements Observer {

	private double temperature;

	@Override
	public void update(Observable o, Object arg) {
		if (o instanceof WeatherData) {
			WeatherData weatherData = (WeatherData) o;
			this.temperature = weatherData.getTemperature();
			System.out.println(arg);
		}
	}

}

拉模型使用的jdk 内置的观察者模式支持。   被观察者实现 Observable 类。

传输数据是吧自己整个给传出去,overser 获取数据是 使用get 方法获取自己想要的数据。

具体的给每个观察者传输数据

都是把每个订阅或注册过的用户都存 以个集合中,然后再遍历集合传数据。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值