`

行为型模式-观察者模式(Observer)

 
阅读更多

一:定义:

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++设计模式-行为型模式-观察者模式

    c++设计模式-行为型模式-观察者模式;qt工程;c++简单源码; 观察者(Observer)模式的定义:指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。这种模式...

    设计模式-观察者模式-作业-observer.zip

    观察者模式(Observer Pattern)是软件设计模式中的行为模式之一,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于实现事件驱动或发布-...

    C#面向对象设计模式纵横谈(19):(行为型模式) Observer 观察者模式 (Level 300)

    **C#面向对象设计模式纵横谈(19)**:**观察者模式**(Observer Pattern)是行为型模式的一种,它在软件工程中扮演着至关重要的角色。观察者模式是一种设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态...

    (行为型模式) Observer 观察者模式

    C#面向对象设计模式 (行为型模式) Observer 观察者模式 视频讲座下载

    设计模式--观察者模式java例子

    观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于事件驱动的系统或者...

    设计模式-观察者

    观察者模式(Observer Pattern)是行为设计模式的一种,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 观察者模式的核心思想是发布-订阅模型,其中...

    C++设计模式--观察者模式 demo

    观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它在C++中的应用广泛且实用。这种模式的核心思想是“主体”(Subject)与“观察者”(Observer)之间的松耦合关系,允许一个对象(即主体)的状态...

    设计模式之Observer - 观察者模式

    观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于实现事件驱动编程或者...

    设计模式-观察者模式(讲解及其实现代码)

    观察者模式,也被称为发布-订阅模式,是软件设计中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式在分布式系统、事件驱动...

    跟我一起学 设计模式-观察者模式

    观察者模式,也称为发布-订阅模式或事件驱动模式,是一种行为设计模式,它定义了对象间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 在C#、ASP.NET等.NET框架中,...

    设计模式之观察者模式(Observer Pattern)

    观察者模式,也被称为发布-订阅模式或事件驱动模式,是软件设计模式中的一种行为模式。这个模式的主要目的是在对象之间建立一种松散耦合的关系,使得当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并...

    设计模式之观察者模式Java实现

    观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于事件驱动的系统或者...

    设计模式--观察者 c++版本

    观察者模式是一种行为设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 观察者模式的核心思想是主体(Subject)与观察者(Observer)之间的...

    设计模式-观察者模式(读书笔记)

    观察者模式是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这个模式在很多场景下都有广泛的应用,例如事件处理、...

    observer-pattern-demo 观察者模式示例

    在这个"observer-pattern-demo"的示例中,我们将深入探讨观察者模式的原理、结构和应用场景。 **1. 模式定义** 观察者模式定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会...

    java常用设计模式-观察者模式

    观察者模式(Observer Pattern)是一种行为设计模式,它定义了一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖它的对象都会得到通知并自动更新。该模式适用于需要在对象间建立动态的、松散耦合的关系的...

    设计模式系列博客--观察者模式

    观察者模式(Observer Pattern)是设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这种模式常用于实现事件驱动的系统或者...

    设计模式---观察者模式

    观察者模式是一种行为设计模式,它允许你定义一个订阅机制,可以及时地在对象之间传播状态变化。在Java中,观察者模式常用于构建事件驱动系统,使得多个对象能够监听并响应某个对象的状态改变。 首先,我们要理解...

Global site tag (gtag.js) - Google Analytics