一:定义:
Observer:Define a one-to-many dependency between objects so that when one object changes state, all its dependents are notified and updated automatically.
二:引入
一个气象观测站的例子:
public class WeatherData ...{
private CurrentConditionsDisplay currentConditionsDisplay;
private ForecastDisplay forecastDisplay;
private StatisticsDisplay statisticsDisplay;
public WeatherData(CurrentConditionsDisplay currentConditionsDisplay,ForecastDisplay forecastDisplay,StatisticsDisplay statisticsDisplay)
...{
this.currentConditionsDisplay=currentConditionsDisplay;
this.forecastDisplay=forecastDisplay;
this.statisticsDisplay=statisticsDisplay;
}
public void mesurementsChanged()
...{
float temp=getTemperature();
float humidity=getHumidity();
float pressure=getPressure();
currentConditionsDisplay.update(temp,humidity,pressure);
forecastDisplay.update(temp,humidity,pressure);
statisticsDisplay.update(temp,humidity,pressure);
}
public float getTemperature()
...{
return 30;
}
public float getHumidity()
...{
return 60;
}
public float getPressure()
...{
return 78;
}
}
public class CurrentConditionsDisplay extends Display ...{
public void update(float temp,float humidity,float pressure)
...{
System.out.println("CurrentConditionsDisplay temp="+temp+",humidity="+humidity+",pressure="+pressure);
}
}
public class Client ...{
public static void main(String[] args) ...{
CurrentConditionsDisplay currentConditionsDisplay=new CurrentConditionsDisplay();
ForecastDisplay forecastDisplay=new ForecastDisplay();
StatisticsDisplay statisticsDisplay=new StatisticsDisplay();
WeatherData weatherData=new WeatherData(currentConditionsDisplay,forecastDisplay,statisticsDisplay);
weatherData.mesurementsChanged();
}
}
问题:
耦合太紧,如果增加新的Display,需修改接口和实现。
observer模式:
public interface Subject ...{
public void registerObserver(Observer observer);
public void removeObserver(Observer observer);
public void notifyObservers();
}
public class WeatherData implements Subject ...{
private List observerList=new ArrayList();
private float temperature;
private float humidity;
private float pressure;
public WeatherData(float temperature,float humidity,float pressure)
...{
this.temperature=temperature;
this.humidity=humidity;
this.pressure=pressure;
}
public void mesurementsChanged()
...{
notifyObservers();
}
public void registerObserver(Observer observer) ...{
observerList.add(observer);
}
public void removeObserver(Observer observer) ...{
observerList.remove(observer);
}
public void notifyObservers() ...{
for(Iterator iter=observerList.iterator();iter.hasNext();)
...{
Observer observer=(Observer)iter.next();
observer.update(temperature,humidity,pressure);
}
}
public float getHumidity() ...{
return humidity;
}
public void setHumidity(float humidity) ...{
this.humidity = humidity;
}
public float getPressure() ...{
return pressure;
}
public void setPressure(float pressure) ...{
this.pressure = pressure;
}
public float getTemperature() ...{
return temperature;
}
public void setTemperature(float temperature) ...{
this.temperature = temperature;
}
}
public interface Observer ...{
public void update(float temp,float humidity,float pressure);
}
public class CurrentConditionsDisplay implements Observer ...{
public void update(float temp,float humidity,float pressure)
...{
System.out.println("CurrentConditionsDisplay temp="+temp+",humidity="+humidity+",pressure="+pressure);
}
}
public class Client ...{
public static void main(String[] args) ...{
WeatherData weatherData=<spa>
分享到:
相关推荐
c++设计模式-行为型模式-观察者模式;qt工程;c++简单源码; 观察者(Observer)模式的定义:指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。这种模式...
观察者模式(Observer Pattern)是软件设计模式中的行为模式之一,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于实现事件驱动或发布-...
**C#面向对象设计模式纵横谈(19)**:**观察者模式**(Observer Pattern)是行为型模式的一种,它在软件工程中扮演着至关重要的角色。观察者模式是一种设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态...
C#面向对象设计模式 (行为型模式) Observer 观察者模式 视频讲座下载
观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于事件驱动的系统或者...
观察者模式(Observer Pattern)是行为设计模式的一种,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 观察者模式的核心思想是发布-订阅模型,其中...
观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它在C++中的应用广泛且实用。这种模式的核心思想是“主体”(Subject)与“观察者”(Observer)之间的松耦合关系,允许一个对象(即主体)的状态...
观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于实现事件驱动编程或者...
观察者模式,也被称为发布-订阅模式,是软件设计中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式在分布式系统、事件驱动...
观察者模式,也称为发布-订阅模式或事件驱动模式,是一种行为设计模式,它定义了对象间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 在C#、ASP.NET等.NET框架中,...
观察者模式,也被称为发布-订阅模式或事件驱动模式,是软件设计模式中的一种行为模式。这个模式的主要目的是在对象之间建立一种松散耦合的关系,使得当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并...
观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于事件驱动的系统或者...
观察者模式是一种行为设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 观察者模式的核心思想是主体(Subject)与观察者(Observer)之间的...
观察者模式是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这个模式在很多场景下都有广泛的应用,例如事件处理、...
在这个"observer-pattern-demo"的示例中,我们将深入探讨观察者模式的原理、结构和应用场景。 **1. 模式定义** 观察者模式定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会...
观察者模式(Observer Pattern)是一种行为设计模式,它定义了一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖它的对象都会得到通知并自动更新。该模式适用于需要在对象间建立动态的、松散耦合的关系的...
观察者模式(Observer Pattern)是设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这种模式常用于实现事件驱动的系统或者...
观察者模式是一种行为设计模式,它允许你定义一个订阅机制,可以及时地在对象之间传播状态变化。在Java中,观察者模式常用于构建事件驱动系统,使得多个对象能够监听并响应某个对象的状态改变。 首先,我们要理解...