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

observer 观察者

    博客分类:
  • java
UP 
阅读更多
一、Observer模式的意图:

在对象的内部状态发生变化时,自动通知外部对象进行响应。

二、Observer模式的构成:

·被观察者:内部状态有可能被改变,而且又需要通知外部的对象

·观察者:需要对内部状态的改变做出响应的对象

三、Observer模式的Java实现:

Java的API中已经为我们提供了Observer模式的实现。具体由java.util.Observable类和java.util.Observer接口完成。

前者有两个重要的方法:

·setChanged:设置内部状态为已改变

·notifyObservers(Object obj):通知观察者所发生的改变,参数obj是一些改变的信息

后者有一个核心方法:

·update(Object obj):相应被观察者的改变,其中obj就是被观察者传递过来的信息,该方法会在notifyObservers被调用时自动调用。

下面是Observer模式的实现过程:

·创建一个被观察者,继承java.util.Observable

·创建一个观察者,实现java.util.Observer接口

·注册观察着,调用addObserver(Observer observer)

·在被观察者改变对象内部状态的地方,调用setChanged()方法,然后调用notifyObservers(Object)方法,通知被观察者

·在观察者的update(Object)方法中,对改变做出响应。

四、Observer模式的好处:

1.Observer模式的优点:

   ·被观察者只需要知道谁在观察它,无需知道具体的观察细节

   ·被观察者一旦发生变化,只需要通过广播的方式告知观察者,至于消息如何到达则不需知道。这样的话无疑消除了被观察者和观察者之间通信的硬编码

   ·当一个被观察者同时被多个观察着观察时,观察者可以只选择自己感兴趣的事件,而忽略其它的事件
 
   ·多个观察者组合起来可以形成一个观察链,如果一旦需要回滚多个操作,此时观察链可以发挥作用

   ·观察者可以实时对被观察对象的变化做出响应,例如自动告警、中断运行等


2.运用Observer模式可以

   ·屏蔽线程间的通信机制:例如两个线程之间,主线程可以作为观察者,执行线程是被观察者。彼此之间只知道对方存在,但不知道之间通信的细节

   ·消除硬编码:如果没有Observer模式,则只能采用回调的模式,或者在代码中显示地调用观察者

   ·优化异常机制:特别适合在异常发生时向顶层监控,减少try-catch代码量



Observer模式的功用,是希望两个(或多个)对象,我们称之为Subject和Observer,当一方的状态发生改变的时候,另一方能够得到通知。也就是说,作为Observer的一方,能够监视到Subject的某个特定的状态变化,并为之做出反应。
我对观察者理解就是一个中心点把所有变化的信息都收集上来,这个中心点有一个名单,根据名单把所有变化的信息散发出去。下面是对学生和老师发送的会议通知:
Java代码

   1. public interface Subject // 
   2. { 
   3.     public void register(Object object); 
   4.     public void remove(Object object); 
   5.     public void nofiyObserver(); 
   6.     public void setMeeting(String meeting); 
   7. } 
   8.  
   9. public class SubjectCenter implements Subject 
  10. { 
  11.     private List<Object> list = new ArrayList<Object>(); 
  12.     private String meeting; 
  13.       
  14.     public void register(Object object); 
  15.     { 
  16.          list.add(object);//survey name list  
  17.     } 
  18.  
  19.     public void remove(Object object); 
  20.     { 
  21.        if(list.indexOf(object) > 0) //remove name list 
  22.           list.remove(i); 
  23.     } 
  24.  
  25.     public void nofiyObserver(); 
  26.     { 
  27.        for(int i = 0;i < list.size();i++) 
  28.        { 
  29.             Observer observer =(Observer)list.get(i); 
  30.             //nofiy student and teacher join to meeting  
  31.             observer.update(meeting); 
  32.        } 
  33.     } 
  34.  
  35.     public void setMeeting(Sting meet) 
  36.     { 
  37.        this.meeting = meeting;//the school have a meeting; 
  38.        nofiyObserver();      // send  meeting message 
  39.     } 
  40. } 
  41.  
  42. public interface Observer 
  43. { 
  44.    public void update(String info); 
  45. } 
  46.  
  47. public class  Student implements Observer 
  48. { 
  49.    public void update(String info) 
  50.    { 
  51.       System.out.println("Hi Guys ,Today have a meeting about" +info); 
  52.    } 
  53. } 
  54.  
  55. public class Teacher implements Observer 
  56. { 
  57.    public void update(String info) 
  58.    { 
  59.       System.out.println("Hi Sir,Today have a meeting about"+info); 
  60.    }  
  61.  
  62. } 
  63.  
  64. public class TestObserver 
  65. { 
  66.    public static void main(String[]args) 
  67.    { 
  68.       Subject subject = new SubjectCenter(); 
  69.       Oberver student = new Student(); 
  70.       Oberver teacher = new Teacher(); 
  71.       subject.register(student);//add student observer 
  72.       subject.register(teacher); //add teacher observer 
  73.       subject.setMeeting("Wrap-up meeting"); 
  74.    } 
  75. } 
分享到:
评论

相关推荐

    Observer观察者模式

    Observer观察者模式是一种行为设计模式,它允许你定义一个订阅机制,可以在对象状态改变时通知多个“观察”该对象的其他对象。这个模式的核心概念是发布-订阅,即发布者(被观察对象)向订阅者(观察者)广播事件或...

    C#面向对象设计模式纵横谈(19):(行为型模式) Observer 观察者模式 (Level 300)

    **C#面向对象设计模式纵横谈(19)**:**观察者模式**(Observer Pattern)是行为型模式的一种,它在软件工程中扮演着至关重要的角色。观察者模式是一种设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态...

    (行为型模式) Observer 观察者模式

    ### (行为型模式) Observer 观察者模式 #### 概述 观察者模式是一种行为设计模式,它定义了一种一对多的关系,让多个观察对象同时监听某一个主题对象。当主题对象发生变化时,所有观察者对象都会收到通知并进行...

    observer观察者模式

    观察者模式(Observer Pattern)是一种行为设计模式,它允许你定义一个订阅机制,可以在对象状态改变时通知多个“观察”该对象的其他对象。在软件工程中,这常用于实现事件驱动编程,使得系统能够及时响应变化。 在...

    Observer 观察者模式 示例 源码 ----设计模式

    2.Observer(观察者) 为那些在目标发生改变时需获得通知的对象定义一个更新接口。 3.ConcreteSubject(具体目标) 将有关状态存入各ConcreteObserver对象。 当它的状态发生改变时,向它的各个观察者发出通知。...

    设计模式之略见一斑(Observer观察者模式)

    本篇文章将深入探讨“Observer”观察者模式,这是一种行为设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 观察者模式的核心概念是主题...

    设计模式之观察者模式(Observer Pattern)

    在观察者模式中,通常有两个主要角色:主题(Subject)和观察者(Observer)。主题是被观察的对象,它持有一个观察者列表,并负责通知这些观察者状态的变化。观察者是依赖主题的对象,当接收到主题的通知时,它们会...

    详解Java编程的Observer观察者设计模式

    这个模式的核心概念是一个主题(Subject)对象和一个或多个观察者(Observer)对象之间的关系,主题可以被多个观察者监视,当主题的状态发生改变时,会自动通知所有观察者。 在Java中,`java.beans....

    设计模式C++学习之观察者模式(Observer)

    观察者模式(Observer)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这种模式在C++中广泛应用,特别是在需要...

    C#设计模式之Observer观察者模式解决牛顿童鞋成绩问题示例

    本文实例讲述了C#设计模式之Observer观察者模式解决牛顿童鞋成绩问题。分享给大家供大家参考,具体如下: 一.理论定义 观察者模式 描述了 一种 一对多的关系。 当某一对象的状态发生改变时,其他对象会得到 改变的...

    观察者模式,Observer

    观察者模式(Observer Pattern)是设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这种模式常用于实现事件驱动的系统或者...

    观察者(Observer)模式

    观察者(Observer)模式是一种行为设计模式,它允许你定义一个订阅机制,可以在对象状态改变时通知多个“观察”该对象的其他对象。在Java编程语言中,这种模式被内置在`java.util.Observable`和`java.util.Observer`类...

    观察者模式Observer

    观察者模式(Observer)是设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这种模式在软件开发中广泛应用于事件处理和实时...

    Observer(观察者模式)学习源码

    - `addObserver(Observer o)`:添加一个新的观察者到观察者列表。 - `deleteObserver(Observer o)`:移除指定的观察者。 - `notifyObservers()`或`notifyObservers(Object arg)`:当被观察对象的状态改变时,调用...

    设计模式之观察者模式(Observer)

    观察者模式(Observer)是软件设计模式中的一种行为模式,其主要目的是在对象之间建立一种松散耦合的关系,使得当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式广泛应用于事件驱动...

Global site tag (gtag.js) - Google Analytics