观察者模式---在对象之间以多对一的依赖,这样一来,当一个对象改变状态,依赖它的对象都会收到通知,并自动更新.
书中以报社和订报者来形容,真是恰到好处(也有注册,删除,通知等功能)!
首先是主题接口(也即被观察者接口),其中定义了注册,删除,通知观察者等方法:
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();
}
分享到:
相关推荐
总的来说,HeadFirst设计模式的学习笔记2关于观察者模式的演示,旨在帮助开发者理解如何使用观察者模式来构建可扩展的系统。通过实际的代码示例,我们可以更深入地掌握这一模式,并将其应用到日常开发中,提升代码的...
《Head First 设计模式》与《Java设计模式(第2版)》是两本非常重要的IT书籍,专注于软件开发中的设计模式。设计模式是解决软件设计中常见问题的经验总结,它们提供了一种标准的方法来处理特定场景下的问题,使得代码...
《Head First设计模式》是一本深受开发者喜爱的设计模式学习书籍,尤其适合初学者。它以其独特的教学风格,通过丰富的图像和生活化的例子,使抽象的软件设计概念变得生动易懂。设计模式是软件开发中经过实践验证的...
《Headfirst设计模式》是一本深受开发者欢迎的设计模式学习书籍,尤其对于初学者而言,其独特的教学方式使得复杂的概念变得易于理解。这本书以其高清的中文版PDF格式提供,结合书中源码,为读者提供了深入实践的可能...
《Head First 设计模式》是软件开发领域的一本经典书籍,尤其对于初学者而言,它以生动、直观的方式讲解了设计模式的精髓。这四个章节分别涵盖了策略模式、观察者模式、装饰者模式以及工厂模式,这些都是面向对象...
《Head-First设计模式》是一本面向初学者的优秀设计模式教程,主要针对Java编程语言。这本书通过易于理解的方式介绍了23种经典的GoF设计模式,帮助开发者提升代码的可复用性和可维护性。设计模式是软件工程中的重要...
观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多...在`head first 设计模式`的讲解中,读者将能深入理解如何在C++中有效地应用观察者模式,并掌握其在实际项目中的使用技巧。
《Head First设计模式》是一本深受开发者欢迎的设计模式教程,尤其适合初学者入门。设计模式在软件工程领域中扮演着至关重要的角色,它们是解决常见编程问题的经验总结,是软件开发人员之间的通用语言,也是提升代码...
《Head First 设计模式》是一本非常受欢迎的设计模式学习书籍,它通过直观、生动的方式讲解了23种经典的GOF设计模式。这本书原本是用Java语言来解释这些模式的,但这里我们有一个C++实现的版本,这为C++开发者提供了...
在Head First的设计模式系列书籍中,作者通过易懂且生动的方式介绍了观察者模式。观察者模式的核心思想是“发布-订阅”机制,它将观察目标(被观察者)和观察者(订阅者)解耦,使得两者可以独立地变化。这种模式的...
《HeadFirst设计模式》是一本深受开发者喜爱的经典书籍,它以独特的方式深入浅出地讲解了设计模式这一重要编程概念。设计模式是软件工程中经过实践验证的、解决常见问题的有效解决方案,对于提升代码可读性、可维护...
《HeadFirst设计模式》是一本深受开发者欢迎的书籍,它以独特、易理解的方式介绍了软件设计中的重要概念——设计模式。设计模式是经验丰富的开发者在解决常见问题时总结出的最佳实践,它们为软件设计提供了可复用的...
《Head-First设计模式》是设计模式领域内一本广受欢迎的入门书籍,以其独特的视觉呈现方式和易懂的讲解风格,让初学者也能快速理解并掌握设计模式的精髓。设计模式是软件工程中的一种最佳实践,是解决常见编程问题的...
《Head First设计模式》是一本深受开发者喜爱的设计模式入门书籍,尤其对于初学者来说,它的讲解方式生动且易于理解。本书以C#语言为背景,深入浅出地介绍了设计模式这一核心的软件工程概念。设计模式是软件开发中的...
《HeadFirst设计模式JAVA版源码》是一份深入学习设计模式的重要资源,它基于流行的编程语言Java,旨在帮助开发者理解并应用设计模式于实际项目中。设计模式是软件工程中的重要概念,它代表了在特定场景下解决问题的...
总的来说,这个压缩包包含的资源可以帮助你深入理解设计模式,通过《HeadFirst设计模式》和《HeadFirst in Java》的源码,你可以学习到如何在实际项目中应用这些模式。而UML类图则提供了直观的视角,便于你把握设计...
《Head First Java设计模式》是一本专为Java开发者量身打造的设计模式指南,以其独特的图文并茂、生动易懂的方式,深入浅出地讲解了设计模式这一编程领域的重要概念。这本书是面向中国的软件开发者,旨在推动知识的...
《Head First 设计模式》的英文版是一本面向初学者的设计模式入门书籍,它以幽默风趣的文风,深入浅出地介绍了软件设计中经常使用的设计模式。设计模式是一套被反复使用、多数人知晓、经过分类编目、代码设计经验的...
《Head First Design Patterns》是一本深入浅出介绍设计模式的图书,由Eric Freeman、Elisabeth Freeman、Bert Bates和Kathy Sierra联合编写。本书结合认知科学原理和神经生物学研究,采用引导式教学方法,通过故事...
《Head First 设计模式》是一本深受欢迎的设计模式书籍,由Eric Freeman、Elisabeth Robson、Bert Bates和Kathy Sierra合著。这本书以其独特的视觉呈现方式和易理解的教学方法,深受程序员们的喜爱,尤其是那些希望...