`
这些年
  • 浏览: 402274 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

zy19982004--设计模式学习二:观察者模式

 
阅读更多

一.概念

     在对象之间定义一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象都会收到通知,并自动更新。

     观察者模式也被称之为:主题-观察者模式,发布-订阅模式,前者是一,后者是多。

 

二.UML

  1. Subject(主题类),最主要的方法:添加/删除观察者,改变状态,通知观察者。
  2. Observer(观察者类),当主题状态改变,通知观察者时,触发观察者的update方法。

三.实例分析

     《那些年,我们一起追的女孩》让我回到了高中,想到了以前的同桌,那个我暗恋N久的女孩子。那时候,我们一起下课,一起吃饭,一起逃课,一起翻 墙...往事啊,泪奔 ...好了,回归正题,再说要被大家喷了。我跟她是一个班,我们是一个班主任,班主任不在,我们可以嘻嘻哈哈玩玩耍耍,班主任来了,我们还是得收敛点。

     对比一下概念:班主任是一,我和她是多,我们依赖班主任,班主任状态改变了(不在教室变成了在教室),我们就要做点改变了。

     Teacher

Java代码  收藏代码
  1. package com.zzy.observer;  
  2.   
  3. import java.util.Observable;  
  4. /** 
  5.  * 主题 
  6.  * @author eason 
  7.  * 
  8.  */  
  9. public class Teacher extends Observable{  
  10.     public void setChanged() {  
  11.         super.setChanged();  
  12.     }  
  13. }  

 

Student

Java代码  收藏代码
  1. package com.zzy.observer;  
  2.   
  3. import java.util.Observable;  
  4. import java.util.Observer;  
  5.   
  6. /** 
  7.  * 观察者 
  8.  * @author eason 
  9.  * 
  10.  */  
  11. public class Student implements Observer{  
  12.   
  13.     private String name;  
  14.     private String action;  
  15.       
  16.     public Student(String name, String action) {  
  17.         this.name = name;  
  18.         this.action =action;  
  19.     }  
  20.       
  21.     @Override  
  22.     public void update(Observable o, Object arg) {  
  23.         System.out.println(this);  
  24.     }  
  25.       
  26.     @Override  
  27.     public String toString() {  
  28.         return "学生" + name + action;  
  29.     }  
  30. }  

 

TestObserver

Java代码  收藏代码
  1. package com.zzy.observer;  
  2.   
  3. /** 
  4.  * 测试类 
  5.  * @author eason 
  6.  * 
  7.  */  
  8. public class TestObserver {  
  9.     public static void main(String[] args) {  
  10.         //班主任  
  11.         Teacher teacher = new Teacher();  
  12.         //我和她  
  13.         Student stu1 = new Student("eason""收起手机");  
  14.         Student stu2 = new Student("grace""停止睡觉");  
  15.         //我跟她所属的班主任  
  16.         teacher.addObserver(stu1);  
  17.         teacher.addObserver(stu2);  
  18.         //老师来了  
  19.         teacher.setChanged();  
  20.         teacher.notifyObservers();  
  21.     }  
  22. }  

     java.util.Observable和java.util.Observer比较简单,有兴趣大家自己去研究下。

 

四.使用场景

  1. 当一个对象的改变会引起其他对象的改变,这个时候,考虑观察者模式。比喻java.util.Swing中的事件监听。

五.使用感受

  1. java.util.Observable内部用一个Vector实现。学习的过程中,自己写一个Observable收获颇多。
  2. 松耦合,主题不知道观察者的具体细节(update方法的具体实现),只要你实现了观察者接口就行。
  3. 主题向观察者推数据。
分享到:
评论

相关推荐

    设计模式详解-JAVA语言实现

    学习和理解这些设计模式对于Java开发者来说至关重要,因为它们可以帮助我们编写出更加高效、可复用的代码。通过实际应用设计模式,我们可以提升代码质量,减少代码的耦合度,使得系统更容易理解和维护。无论你是初学...

    HeadFirst设计模式

    《HeadFirst设计模式》是一本深受开发者喜爱的设计模式入门书籍,以其独特的教学方式,通过丰富的图解和幽默的语言,使得复杂的设计模式概念变得易于理解。这本书涵盖了23种经典的GoF设计模式,以及一些现代软件开发...

    RF-DW-ZY-01 市场调研作业指引(1).zip

    3. **数据收集**:涵盖如何设计有效的调查问卷、选择合适的样本群体、进行实地观察以及利用公开的市场报告等。 4. **数据分析**:介绍如何对收集的数据进行整理、清洗、分析,以揭示隐藏的市场趋势和消费者行为模式...

    EDA实验指导书

    总之,ZY11203E实验系统主板及其丰富的功能模块,构成了一个全面的EDA学习与研究平台,不仅适用于初学者掌握基本的EDA技能,也支持高级用户进行复杂的系统级设计与优化,是电子工程教育与科研不可或缺的工具。

    北航软件学院面向对象分析与设计课后作业

    7. **设计模式**:如工厂模式、单例模式、观察者模式等,是面向对象设计中的通用解决方案。 8. **UML建模**:学习并使用UML图来描绘系统结构和行为,如用例图、类图、序列图和状态图。 通过完成这样的作业,学生...

    JAVA核心知识点整理.rar

    常见的设计模式包括单例模式、工厂模式(简单工厂、工厂方法、抽象工厂)、建造者模式、装饰器模式、代理模式、观察者模式、策略模式、模板方法模式、适配器模式、桥接模式等。理解并能灵活运用这些设计模式,可以使...

    java个人通讯录系统

    7. **设计模式**:个人通讯录系统可能运用了单例模式来保证通讯录实例的唯一性,工厂模式来创建GUI组件,或者观察者模式来实时更新界面显示。 8. **数据库连接**:为了存储大量联系人信息,系统可能使用了关系型...

    java程序猿必备开发文档

    12. **设计模式**:如单例、工厂、观察者等,是解决常见编程问题的模板,掌握这些模式能写出更易于维护和扩展的代码。 13. **JVM原理**:理解内存模型、垃圾收集、类加载机制,有助于优化程序性能和避免内存泄漏。 ...

    计算机组成原理课程设计实验报告.docx

    编程开关SP06允许实验者在WRITE、READ和RUN模式间切换,以便编写、校验和运行微程序。 2. **微指令格式**: 微指令字长为24位,包含了后续微地址、译码字段和控制位。其中,6位的后续微地址用于指定下一条微指令的...

    MBD_1开发环境搭建以及LED闪烁实验

    MBD方法的优势在于,它将复杂的硬件初始化和底层代码编写过程简化为图形化建模,降低了学习曲线,提高了开发效率。结合手把手的教学方式和实验验证,即使是初学者也能快速掌握这一技术。 本实验的完整视频教程可...

Global site tag (gtag.js) - Google Analytics