观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。
当两个对象之间松耦合,他们依然可以交互,但是不太清楚彼此的细节。观察者模式提供了一种对象设计让主题和观察者之间松耦合。
我们来看看一种push方式的 观察者模式。
首先是观察者 主题 等的接口。
//主题
public interface Subject {
public void registerObserver(Observer o);
public void removeObserver(Observer o);
public void notifyObservers();
}
//观察者
public interface Observer {
public void update(float temp, float humidity, float pressure);
}
//other 操作
public interface DisplayElement {
public void display();
}
//主题
public interface Subject
{
public void registerObserver(Observer o);
public void removeObserver(Observer o);
public void notifyObservers();
}
//观察者
public interface Observer
{
public void update(float temp, float humidity, float pressure);
}
//other 操作
public interface DisplayElement
{
public void display();
}
实现这些接口。
//实现主题
public class WeatherData implements Subject{
private ArrayList observers;
private float temperature;
private float humidity;
private float pressure;
public WeatherData()
{
observers = new ArrayList();
}
public void notifyObservers() {
// TODO Auto-generated method stub
for(int i=0, len=observers.size(); i < len; i++)
{
Observer observer = (Observer) observers.get(i);
observer.update(temperature, humidity, pressure );
}
}
public void registerObserver(Observer o) {
// TODO Auto-generated method stub
observers.add(o);
}
public void removeObserver(Observer o) {
// TODO Auto-generated method stub
int i = observers.indexOf(o);
if(i >= 0)
{
observers.remove(i);
}
}
public void measurementsChange()
{
notifyObservers();
}
public void setMeasurements(float temperature, float humidity, float pressure)
{
this.temperature = temperature;
this.humidity = humidity;
this.pressure = pressure;
measurementsChange();
}
}
//实现观察者
public class CurrentConditionsDisplay implements Observer, DisplayElement{
private float temperature;
private float humidity;
private Subject weatherData;
public CurrentConditionsDisplay(Subject weatherData)
{
this.weatherData = weatherData;
weatherData.registerObserver(this);
}
public void update(float temp, float humidity, float pressure) {
// TODO Auto-generated method stub
this.temperature = temp;
this.humidity = humidity;
display();
}
public void display() {
// TODO Auto-generated method stub
System.out.println("Current conditions: "+ temperature + "F degrees and " + humidity + "% humidity");
}
}
//实现主题
public class WeatherData implements Subject
{
private ArrayList observers;
private float temperature;
private float humidity;
private float pressure;
public WeatherData()
{
observers = new ArrayList();
}
public void notifyObservers()
{
for(int i=0, len=observers.size(); i < len; i++)
{
Observer observer = (Observer) observers.get(i);
observer.update(temperature, humidity, pressure ); }
}
public void registerObserver(Observer o)
{
observers.add(o);
}
public void removeObserver(Observer o)
{
int i = observers.indexOf(o);
if(i >= 0)
{
observers.remove(i);
}
}
public void measurementsChange()
{
notifyObservers();
}
public void setMeasurements(float temperature, float humidity, float pressure)
{
this.temperature = temperature;
this.humidity = humidity;
this.pressure = pressure;
measurementsChange();
}
}
//实现观察者
public class CurrentConditionsDisplay implements Observer, DisplayElement
{
private float temperature;
private float humidity;
private Subject weatherData;
public CurrentConditionsDisplay(Subject weatherData)
{
this.weatherData = weatherData;
weatherData.registerObserver(this);
}
public void update(float temp, float humidity, float pressure)
{
this.temperature = temp;
this.humidity = humidity;
display();
}
public void display()
{
System.out.println("Current conditions: "+ temperature + "F degrees and " + humidity + "% humidity");
}
}
实现完了这些接口,测试观察者模式
public class WeatherStation {
public static void main(String[] args)
{
WeatherData weatherData = new WeatherData();
CurrentConditionsDisplay display = new CurrentConditionsDisplay(weatherData);
weatherData.setMeasurements(80, 65, 30.4f);
weatherData.setMeasurements(82, 76, 30.2f);
weatherData.setMeasurements(78, 90, 29.4f);
}
}
分享到:
相关推荐
设计模式--观察者模式java例子
JAVA-设计模式-行为型模式-观察者模式
结合微信公众号讲解观察者模式,生动形象,关键是上手快啊
java常用设计模式-观察者模式
Java设计模式-第22章-观察者模式.ppt该文档详细且完整,值得借鉴下载使用,欢迎下载使用,有问题可以第一时间联系作者~
设计模式之观察者模式Java版本实现和UML类设计图
用原始的java语言写的观察模式 雅典娜和圣斗士 雅典娜充当观察者
JAVA设计模式-day2,请的行业大能讲得课程,涉及:创建模式(5种: 1、 工厂方法模式(Factory Method); 2、 抽象工厂模式; 3、 单例模式(Singleton) • 4、 建造者模式(Builder); 5、 原型模式(Prototype...
设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段...
根据《HeadFirst 设计模式》自己操作实现的观察者模式Java代码
java 设计模式 观察者模式 简单实例 包括测试test类
1.1 创建型模式 4 1.1.1 工厂方法 4 1.1.2 抽象工厂 6 1.1.3 建造者模式 10 1.1.4 单态模式 13 ...1.3.7 观察者模式 54 1.3.8 状态模式 58 1.3.9 策略模式 61 1.3.10 模板方法 63 1.3.11 访问者模式 65
设计模式----观察者模式demo,使用java自带的工具类,实现,后面会上传一个完全自己代码实现的demo
java观察者模式的实例代码。从最简单的实例开始,到观察者模式。有什么问题可以加扣扣共同探讨
《java设计模式》课后习题及模拟试题答案
浅析Java设计模式【1】——观察者!
观察者模式(有时又被称为发布(publish )-订阅(Subscribe)模式、模型-视图(View)模式、源-收听者(Listener)模式或从属者模式)是软件设计模式的一种。在此种模式中,一个目标物件管理所有相依于它的观察者物件...
章节介绍:1、爪哇语言结构性模式之变压器模式介绍 2、爪哇语言抽象工厂创立性模式介绍 3、工厂方法创立性模式介绍 4、单态创立性模式介绍 5、单态创立性模式介绍 6、观察者模式介绍7、责任链模式 8、设计模式之...
Java 观察者模式的浅析 简单地说,观察者模式定义了一个一对多的依赖关系,让一个或多个观察者对象监察一个主题对象。这样一个主题对象在状态上的变化能够通知所有的依赖于此对象的那些观察者对象,使这些观察者...
java实现观察者设计模式,利用ApplicationListener和ApplicationEvent。Test包里有测试代码