`
huainansto
  • 浏览: 28298 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

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

    博客分类:
  • JAVA
阅读更多
观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。

当两个对象之间松耦合,他们依然可以交互,但是不太清楚彼此的细节。观察者模式提供了一种对象设计让主题和观察者之间松耦合。

我们来看看一种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设计模式的知识点说明: 1. 策略模式(Strategy Pattern)是一种行为设计模式,允许在运行时选择算法的行为。策略模式的意图是定义一系列算法,将每个算法封装起来,并使它们可以...

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

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

    JAVA-设计模式-行为型模式-观察者模式

    JAVA-设计模式-行为型模式-观察者模式

    Java 设计模式-观察者模式(Observer)

    结合微信公众号讲解观察者模式,生动形象,关键是上手快啊

    Java设计模式-第22章-观察者模式.ppt

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

    JAVA设计模式-chm版

    这个“JAVA设计模式-chm版”资源显然包含了关于Java设计模式的详细信息,便于理解和应用。设计模式是对常见问题的解决方案的标准化描述,它们在软件工程中起到了重要的作用,帮助开发者创建可维护、可扩展且易于理解...

    Java设计模式----通俗易懂版

    - 观察者模式:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。 - 状态模式:允许对象在其内部状态改变时改变它的行为,看起来好像对象改变了它的...

    java设计模式-观察者 小案例

    在这个"java设计模式-观察者 小案例"中,我们可能会看到一个简单的模拟,雅典娜作为观察者,而其他角色(如圣斗士)则是被观察的对象。雅典娜的角色代表了观察者,当被观察对象(比如某个事件或状态)发生变化时,她...

    JAVA设计模式--程序设计--反射--注解--泛型

    Java设计模式、程序设计、反射、注解和泛型是Java开发中的核心概念,它们各自在不同的场景下发挥着重要作用,构建出高效、可维护的软件系统。 首先,Java设计模式是面向对象编程中的一种最佳实践,是解决常见问题的...

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

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

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

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

    java设计模式-图解-附代码

    ### Java设计模式详解 #### 创建型模式 **1.1 工厂方法(Factory Method)** 工厂方法模式定义了一个创建对象的接口,但允许子类决定实例化哪一个类。这使得一个类的实例化可以被推迟到其子类。这种模式在以下...

    java设计模式的应用

    ### Java设计模式的应用 #### 一、引言 在当今快速发展的软件开发领域,Java作为一门功能强大且灵活的语言,不仅拥有丰富的API资源,还能与强大的数据库系统无缝对接。这使得许多开发人员能够以模块化的形式构建...

    JAVA设计模式---100%推荐

    这篇名为"JAVA设计模式---100%推荐"的资源,可能是对Java设计模式的深入解析,旨在帮助开发者更好地理解和应用这些模式。 设计模式通常分为三类:创建型、结构型和行为型。创建型模式涉及对象的实例化过程,如单例...

    JAVA设计模式-原则和23种设计模式归纳总结

    本资源主要介绍了JAVA设计模式的原则和23种设计模式的总结。设计模式是软件设计中的一种解决方案,能够使软件系统更加灵活、可维护和可扩展。本资源首先介绍了设计模式的六大原则,包括单一责任原则、开闭原则、里氏...

    设计模式-Java语言中的应用

    设计模式通常分为三类:创建型模式(如工厂模式、抽象工厂模式、单例模式、建造者模式、原型模式),结构型模式(如适配器模式、装饰器模式、代理模式、桥接模式、组合模式、外观模式、享元模式)以及行为型模式(如...

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

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

    java与模式-阎宏

    4. 行为型模式:包括职责链模式、命令模式、解释器模式、迭代器模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式和访问者模式。行为型模式关注于对象之间的交互和行为,帮助我们更好地管理复杂的...

    JAVA设计模式-day2.pdf

    JAVA设计模式-day2,请的行业大能讲得课程,涉及:创建模式(5种: 1、 工厂方法模式(Factory Method); 2、 抽象工厂模式; 3、 单例模式(Singleton) • 4、 建造者模式(Builder); 5、 原型模式(Prototype...

    Java设计模式-图解-附代码.doc

    包括策略模式、模板方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、解释器模式等。这些模式涉及到算法选择、事件处理、异步通信等多种软件设计问题。 设计模式不仅仅...

Global site tag (gtag.js) - Google Analytics