`
scnujie
  • 浏览: 127809 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Head First设计模式二---观察者模式

阅读更多
   观察者模式---在对象之间以多对一的依赖,这样一来,当一个对象改变状态,依赖它的对象都会收到通知,并自动更新.

   书中以报社和订报者来形容,真是恰到好处(也有注册,删除,通知等功能)!

   首先是主题接口(也即被观察者接口),其中定义了注册,删除,通知观察者等方法:

 
 package com.jie.observer;

public interface Subject {

	public void registerObserver(Observer o);
	public void removeObserver(Observer o);
	public void notifyObservers();
}


  接着是被观察者(也即被依赖者,其实现了上面的接口):

  
package com.jie.observer;

import java.util.*;

public class WeatherData implements Subject{

	private ArrayList observers;
	private float temperature;
	private float humidity;
	private float pressure;
	
	public WeatherData()
	{
		observers=new ArrayList();
	}
	
	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 notifyObservers()
	{
		for(int i=0;i<observers.size();i++)
		{
			Observer observer=(Observer)observers.get(i);
			observer.update(temperature,humidity,pressure);
		}
	}
	
	public void measurementsChanged()
	{
		notifyObservers();
	}
	
	public void setMeasurements(float temperature,float humidity,float pressure)
	{
	    this.temperature=temperature;
	    this.humidity=humidity;
	    this.pressure=pressure;
	    measurementsChanged();
	    
	}
}



  跟着就是观察者接口:

 
 package com.jie.observer;

public interface Observer {

	public void update(float temperature,float humidity,float pressure);
}



   接着当然观察者(实现了上面的观察者接口):

  
package com.jie.observer;

public class CurrentConditionsDisplay implements Observer,DisplayElement{
	
	private float temperature;
	private float humidity;
	private float pressure;
	private Subject weatherData;
	
	public CurrentConditionsDisplay(Subject weatherData)
	{
		this.weatherData=weatherData;
		weatherData.registerObserver(this);
	}
	
    public void update(float temperature,float humidity,float pressure)
    {
    	this.temperature=temperature;
    	this.humidity=humidity;
    	this.pressure=pressure;
    	display();
    }
    
    public void display()
    {
    	System.out.println("Current conditions:"+temperature+"F degrees and "+
    			humidity+"% humidity "+pressure+" pressure");
    }
}



   最后少不了一个测试类:

  
package com.jie.observer;

public class Test {

	public static void  main(String [] args)
	{
		WeatherData wd=new WeatherData();
		CurrentConditionsDisplay ccd=new CurrentConditionsDisplay(wd);
		wd.setMeasurements(21, 13, 30.4f);
		wd.setMeasurements(1, 2, 3f);
		
	}
}


  其中也用到了一个显示信息的接口,对模式没什么影响,一并赋上:
 
 
package com.jie.observer;

public interface DisplayElement {

	public void display();
}


3
3
分享到:
评论
3 楼 scnujie 2008-03-31  
http://tk.cn.yahoo.com/a/r7DXS%2BuwfA%3D%3D
2 楼 scnujie 2008-03-26  
我尽量吧.不过最近时间好像不是很多!
1 楼 kunlunx 2008-03-26  
看完了都发出来,俺们就不用再去看那本厚书了

相关推荐

    HeadFirst 设计模式学习笔记2--观察者模式 demo

    总的来说,HeadFirst设计模式的学习笔记2关于观察者模式的演示,旨在帮助开发者理解如何使用观察者模式来构建可扩展的系统。通过实际的代码示例,我们可以更深入地掌握这一模式,并将其应用到日常开发中,提升代码的...

    Head First 设计模式 +Java设计模式(第2版)

    《Head First 设计模式》与《Java设计模式(第2版)》是两本非常重要的IT书籍,专注于软件开发中的设计模式。设计模式是解决软件设计中常见问题的经验总结,它们提供了一种标准的方法来处理特定场景下的问题,使得代码...

    Head First设计模式---中文版

    《Head First设计模式》是一本深受开发者喜爱的设计模式学习书籍,尤其适合初学者。它以其独特的教学风格,通过丰富的图像和生活化的例子,使抽象的软件设计概念变得生动易懂。设计模式是软件开发中经过实践验证的...

    Headfirst设计模式中文高清PDF+附书源码

    《Headfirst设计模式》是一本深受开发者欢迎的设计模式学习书籍,尤其对于初学者而言,其独特的教学方式使得复杂的概念变得易于理解。这本书以其高清的中文版PDF格式提供,结合书中源码,为读者提供了深入实践的可能...

    head First 设计模式1-4章

    《Head First 设计模式》是软件开发领域的一本经典书籍,尤其对于初学者而言,它以生动、直观的方式讲解了设计模式的精髓。这四个章节分别涵盖了策略模式、观察者模式、装饰者模式以及工厂模式,这些都是面向对象...

    [中文]Head-First设计模式.pdf

    《Head-First设计模式》是一本面向初学者的优秀设计模式教程,主要针对Java编程语言。这本书通过易于理解的方式介绍了23种经典的GoF设计模式,帮助开发者提升代码的可复用性和可维护性。设计模式是软件工程中的重要...

    head first 设计模式 观察者模式 C++ 代码

    观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多...在`head first 设计模式`的讲解中,读者将能深入理解如何在C++中有效地应用观察者模式,并掌握其在实际项目中的使用技巧。

    Head First设计模式-中文版

    《Head First设计模式》是一本深受开发者欢迎的设计模式教程,尤其适合初学者入门。设计模式在软件工程领域中扮演着至关重要的角色,它们是解决常见编程问题的经验总结,是软件开发人员之间的通用语言,也是提升代码...

    head first 设计模式-C++实现.zip

    《Head First 设计模式》是一本非常受欢迎的设计模式学习书籍,它通过直观、生动的方式讲解了23种经典的GOF设计模式。这本书原本是用Java语言来解释这些模式的,但这里我们有一个C++实现的版本,这为C++开发者提供了...

    [行为模式]head first 设计模式之观察者模式(observer)

    在Head First的设计模式系列书籍中,作者通过易懂且生动的方式介绍了观察者模式。观察者模式的核心思想是“发布-订阅”机制,它将观察目标(被观察者)和观察者(订阅者)解耦,使得两者可以独立地变化。这种模式的...

    HeadFirst设计模式(深入浅出设计模式)-高清

    《HeadFirst设计模式》是一本深受开发者喜爱的经典书籍,它以独特的方式深入浅出地讲解了设计模式这一重要编程概念。设计模式是软件工程中经过实践验证的、解决常见问题的有效解决方案,对于提升代码可读性、可维护...

    HeadFirst设计模式PPT

    《HeadFirst设计模式》是一本深受开发者欢迎的书籍,它以独特、易理解的方式介绍了软件设计中的重要概念——设计模式。设计模式是经验丰富的开发者在解决常见问题时总结出的最佳实践,它们为软件设计提供了可复用的...

    [中文]Head-First设计模式

    《Head-First设计模式》是设计模式领域内一本广受欢迎的入门书籍,以其独特的视觉呈现方式和易懂的讲解风格,让初学者也能快速理解并掌握设计模式的精髓。设计模式是软件工程中的一种最佳实践,是解决常见编程问题的...

    Head.First设计模式--37-78.rar.pdf (C#)

    《Head First设计模式》是一本深受开发者喜爱的设计模式入门书籍,尤其对于初学者来说,它的讲解方式生动且易于理解。本书以C#语言为背景,深入浅出地介绍了设计模式这一核心的软件工程概念。设计模式是软件开发中的...

    HeadFirst设计模式JAVA版源码

    《HeadFirst设计模式JAVA版源码》是一份深入学习设计模式的重要资源,它基于流行的编程语言Java,旨在帮助开发者理解并应用设计模式于实际项目中。设计模式是软件工程中的重要概念,它代表了在特定场景下解决问题的...

    Head First设计模式和HeadFirst in java 源码以及23种设计模式关系图

    总的来说,这个压缩包包含的资源可以帮助你深入理解设计模式,通过《HeadFirst设计模式》和《HeadFirst in Java》的源码,你可以学习到如何在实际项目中应用这些模式。而UML类图则提供了直观的视角,便于你把握设计...

    Head First java设计模式-中文版

    《Head First Java设计模式》是一本专为Java开发者量身打造的设计模式指南,以其独特的图文并茂、生动易懂的方式,深入浅出地讲解了设计模式这一编程领域的重要概念。这本书是面向中国的软件开发者,旨在推动知识的...

    HeadFirst设计模式英文版

    《Head First 设计模式》的英文版是一本面向初学者的设计模式入门书籍,它以幽默风趣的文风,深入浅出地介绍了软件设计中经常使用的设计模式。设计模式是一套被反复使用、多数人知晓、经过分类编目、代码设计经验的...

    Head First Design Patterns 英文版 Head First设计模式

    《Head First Design Patterns》是一本深入浅出介绍设计模式的图书,由Eric Freeman、Elisabeth Freeman、Bert Bates和Kathy Sierra联合编写。本书结合认知科学原理和神经生物学研究,采用引导式教学方法,通过故事...

    head first 设计模式 PDF电子书下载

    《Head First 设计模式》是一本深受欢迎的设计模式书籍,由Eric Freeman、Elisabeth Robson、Bert Bates和Kathy Sierra合著。这本书以其独特的视觉呈现方式和易理解的教学方法,深受程序员们的喜爱,尤其是那些希望...

Global site tag (gtag.js) - Google Analytics