转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39755577
观察者(Observer)模式定义:在对象之间定义了一对多的依赖关系,这样一来,当一个对象改变状态时,依赖它的对象都会收到通知并自动跟新。Java已经提供了对观察者Observer模式的默认实现, Java对观察者模式的支持主要体现在Observable类和Observer接口。先看uml模型图:
一、UML模型图
二、代码实现
/** 示例:咱们去菜市场买菜 * * 小商贩--主题 */ class Food extends Observable { /** 菜名 */ private String name; /** 菜价 */ private float price; public Food(String name, float price) { this.name = name; this.price = price; } public String getName() { return name; } public float getPrice() { return price; } public void setPrice(float price) { this.price = price; /** * 设置菜价的状态已经被改变 */ this.setChanged(); /** * 通知【所有】正在看菜(已经注册了)的顾客,然后回调Observer的update方法进行更新 * * 这里可以体现对象的一对多:一个小商贩一旦更新价格(即一个对象改变状态),便会自动通知所有的顾客(依赖它的对象都会收到通知) * 并自动update */ this.notifyObservers(price); } } /** * 顾客 --观察者 */ class Customer implements Observer { private String name; public Customer(String name) { this.name = name; } public String getName() { return name; } @Override public void update(Observable o, Object arg) { if (o instanceof Food && arg instanceof Float) { Food food = (Food) o; float price = (Float) arg; System.out.println("您好:" + this.name + " ," + food.getName() + "的价格已经发生改变,现在的价格为:" + price + "元/斤"); } } } /** * 客户端测试类 * * @author Leo */ public class Test { public static void main(String[] args) { Food food = new Food("土豆", 1.0f); Customer zhangsan = new Customer("张三"); Customer lisi = new Customer("李四"); /** * 添加顾客 */ food.addObserver(zhangsan); food.addObserver(lisi); /** * 更新价格 */ food.setPrice(1.5f); } }
三、应用场景
GUI框架、气象观察等
四、小结
在通知所有观察者之前一定要调用 setChanged()方法来设置被观察者的状态已经被改变,这样notifyObservers()才会回调Observer的update方法进行更新。
以上内容如果有不同的见解或疏忽的地方,还请大家提出宝贵的建议或意见。
最后大家可以试着将下面的uml模型进行具体的代码实现,如图:附源码
相关推荐
本教程对Java 23种设计模式进行了总结,涵盖了策略模式、观察者模式、装饰者模式、工厂方法模式、抽象工厂模式、单例模式、命令模式、适配器模式、外观模式、模板方法模式、迭代器模式、组合模式、状态模式、代理...
设计模式(Design pattern)是一套被反复使用、...本章系Java之美[从菜鸟到高手演变]系列之设计模式,我们会以理论与实践相结合的方式来进行本章的学习,希望广大程序爱好者,学好设计模式,做一个优秀的软件工程师!
在这个"菜鸟教程设计模式之工厂模式代码整理"中,我们将深入探讨工厂模式的基本概念、结构以及如何在实际编程中应用。 工厂模式的核心思想是通过一个专门的工厂类来创建对象,而不是让客户端代码直接实例化具体的...
本资源“设计模式学习经典篇之菜鸟篇”旨在为初学者提供一个全面而通俗易懂的设计模式学习路径。 设计模式的核心在于重用已验证的解决方案,以提高代码的可读性、可维护性和可扩展性。根据GOF(Gamma, Helm, ...
- 单例模式、工厂模式、观察者模式等经典设计模式的讲解。 - 设计模式在实际项目中的应用实例分析。 5. **Spring框架**: - Spring框架的核心功能:DI(依赖注入)、AOP(面向切面编程)。 - Spring MVC的工作...
简单例子说明了java的23种设计模式的原理,方便大家进行程序开发,对于入门级选手(我也是初学者)有很大的帮助
java常用的设计模式一个简单总结,如工厂模式、单例模式、代理模式等等。(楼主也是未入门的菜鸟,如有错误请及时联系楼主更正,谢谢!)
观察者模式,也被称为发布-订阅(Publish-Subscribe)模式,是软件设计模式中的一个经典概念,主要用于实现对象之间的解耦。在这个模式中,观察者(Observer)是那些对主题(Subject)状态变化感兴趣的对象,而主题...
行为类型模式模版方法模式、命令模式、迭代器模式、观察者模式、介入者模式、多层模式、解释器模式、状态模式、策略模式、责任链模式、访问者模式。参考洪阳、菜鸟教程等处文章所写。如有错误欢迎指正,如有针对性,...
3. **行为型模式**:包括责任链模式、命令模式、解释器模式、迭代器模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式和访问者模式。这类模式关注于对象之间的交互和行为。 - 责任链模式让多个对象...
8. **JAVA设计模式.chm**:设计模式是软件工程中的重要概念,这本书详细介绍了23种经典设计模式,如单例模式、工厂模式、观察者模式等,对提升代码质量和可维护性有极大帮助。 9. **Oracle optimizer.chm**:可能...
9. **设计模式**:介绍一些常见的设计模式,如单例、工厂、观察者等,以及如何在实际项目中应用它们。 进入Java Web开发领域,文档可能会涵盖: 10. **Servlet与JSP**:讲解如何使用Servlet进行后端处理,以及JSP...
【Java菜鸟教程】是针对初学者精心编写的教程,旨在帮助新手快速掌握Java编程语言的基础知识。本教程全面覆盖了Java的核心概念和技术,是学习Java编程的理想起点。 首先,Java是一种面向对象的编程语言,由Sun ...
设计模式(菜鸟到高手)
在Java中实现设计模式时,需要注意对线程安全、资源释放、异常处理等细节的把握。例如,在单例模式中,若未处理好线程同步,则可能会产生多个实例。工厂模式在实现时应避免在具体产品中出现具体工厂的代码,抽象工厂...
"Java培训教程 菜鸟到高手"是一套旨在帮助初学者全面掌握Java编程技能的教程。这个教程的目标是通过系统性的学习,将新手逐步引领至高级开发者水平。 首先,Java基础知识是学习的起点。包括Java的历史、特性以及为...
设计模式(Design pattern)是一套被反复使用、...本章系Java之美[从菜鸟到高手演变]系列之设计模式,我们会以理论与实践相结合的方式来进行本章的学习,希望广大程序爱好者,学好设计模式,做一个优秀的软件工程师!
java设计模式,如何从一个菜鸟成为江湖上的传说,首先你得把这本书给看明白了。
### Java设计模式详解 #### 一、概述 Java设计模式是一种软件工程领域的经典主题,它主要探讨了在...以上只是部分设计模式的介绍,更多关于Java设计模式的内容及其实现细节,请参阅原书以获得更深入的理解和学习。