`
scnujie
  • 浏览: 126449 次
  • 性别: 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--观察者模式 demo http://blog.csdn.net/laszloyu/archive/2010/05/12/5581769.aspx

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

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

    head first 设计模式例子源代码 c++版 第二章 观察者模式

    最近在看head first 设计模式,书上的例子是用java编写的.因为工作上C用的比较多,所以决定编看书,边用C++也编写书上的例子.既可以加深对设计模式的理解,也顺便练习下c++. 希望这写代码也能帮助别人学习c++和设计模式...

    《HeadFirst设计模式》观察者模式c++实现代码

    观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。 Observer Pattern defines a one-to-many dependency between objects so that when one object ...

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

    NULL 博文链接:https://jacky-dai.iteye.com/blog/1132063

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

    根据《HeadFirst 设计模式》自己操作实现的观察者模式Java代码

    HeadFirst设计模式.rar

    中文扫描版文档,高清。在pad上可以放大使用也不会模糊!!!!内含的设计模式有:观察者模式等...

    Head First 设计模式 JAVA源码

    第十讲:观察者模式 第十一讲:享元模式 第十二讲:代理模式 第十三讲:外观模式 第十四讲:组合模式 第十五讲:桥接模式 第十六讲:适配器模式 第十七讲:解释器模式 第十八讲:中介者模式 第十九讲:职责...

    head first 设计模式

    2 观察者模式 让你的对象知悉现况 3 装饰者模式 装饰对象 4 工厂模式 烘烤OO的精华 5 单件模式 独一无二的对象 6 命令模式 封装调用 7 适配器模式与外观模式 随遇模式 8 模板方法模式 封装算法 9 选代器与组合模式 ...

    Head First设计模式 中文 高清

    2 观察者模式 让你的对象知悉现况 3 装饰者模式 装饰对象 4 工厂模式 烘烤OO的精华 5 单件模式 独一无二的对象 6 命令模式 封装调用 7 适配器模式与外观模式 随遇模式 8 模板方法模式 封装算法 9 选代器与组合模式 ...

    Head First 设计模式(中文完整版+附书源码)

    经典的设计模式,单例模式、工厂模式、装饰模式、观察者模式

    Head.First设计模式_PDF.part1

    Head.First设计模式_PDF(高清扫描版) 第一部分(共三部分) 在我的资源下可找到其他两部部分 强大的写作阵容。《Head First设计模式》作者Eric Freeman和ElElisabeth Freeman是作家、讲师和技术顾问。Eric拥有耶鲁...

    Head.First.设计模式.中文版 1-8章

    Head.First.设计模式.中文版 1 欢迎来到设计模式世界:设计模式入门  模拟鸭子应用  Joe想到继承  利用接口如何?  软件开发的不变真理  分开变化和不变部分  设计鸭子的行为  测试鸭子的代码  动态地设置...

    Head First(Design Patterns) 设计模式英文原版

     2观察者模式让你的对象知悉现况  3装饰者模式装饰对象  4工厂模式烘烤OO的精华  5单件模式独一无二的对象  6命令模式封装调用  7适配器模式与外观模式随遇模式  8模板方法模式封装算法  9选...

    HeadFirst源代码

    HeadFirst源代码,所有设计模式JAVA代码,观察者模式,装饰者模式,工厂模式,单件模式,命令模式,适配器模式,外观模式等

    head-first-design-patterns:Head First设计模式手册中包含的练习项目

    内容策略模式:第22页Simuduck实施策略模式:第25页设计益智练习-冒险游戏观察者模式:第60页天真气象站实施

    Head First Design Pattern(en) pdf(part1)

    1 欢迎来到设计模式世界:设计模式入门  模拟鸭子应用  Joe想到继承  利用接口如何?  软件开发的不变真理  分开变化和不变部分  设计鸭子的行为  测试鸭子的代码  动态地设置行为  封装行为的大局观  ...

    观察者模式简单例子

    观察者模式的简单例子,根据《Head First设计模式》第2章中的天气预告版的例子编写

Global site tag (gtag.js) - Google Analytics