`
linbzh
  • 浏览: 71708 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

observer观察者模式

阅读更多

      observer观察者模式,取名为观察者可能会让人费解,该模式的思想跟订阅/发布服务的思想是相近的,所以称为订阅/发布模式更为通俗贴切。
      存在着这样的类:类A的某个状态发生改变,或者触发了某个事件,会影响到其他的n个类(一般是实现了相同的接口)的状态;或者n个类的某些状态是在某一时刻内“同时”发生的。一种不明智的作法就是,在类A中编写硬代码,如果n增加了,就要向类A添加相应的代码,并且这些代码会是跟前n-1次前添加的基本上是一样的。

public class Observable {
  private ObserverA a;
  private ObserverB b;
  /*a,b的geter/seter ......*/
  public void setA(ObserverA a){this.a=a;}
  public Observable(){/*...*/} 
  public void notifyObservers(){
     a.refreshData();
     b.refreshData();
  }
}

       如果ObserverA和ObserverB的接口不一样,那么就只能这么做了(但也许可以用适配器来解决)。
      有发布类A,和订阅类B、C等若干个类,实例化这若干个类后,向A注册这些订阅类实例,当发布类A执行某些操作并需要通知向A注册的若干个订阅类时,则通过调用类A相应的函数来实现。订阅者也可以取消注册。一般不同的订阅者是实现相同的接口。
一般架构:

public class Observable {
  private Vector observerList;
  public Observable(){/*...*/} 
  public void notifyObservers(){
      for (int i = 0; i < observersList.size(); i++) {
      Observer observer = (Observer) observersList.elementAt(i);
      observer.refreshData();
    }
  }
  public void register(Observer obs){observersList.addElement(obs);}
  public void unRegister(Observer obs){/*...*/}
}

public interface Observer {
  public void refreshData();
}
public class ObserverA implements Observer{
  public ObserverA(Observable observable){observable.register(this);}
  public void refreshData(){/*...*/}
}
public class ObserverB implements Observer{
  public ObserverB(Observable observable){observable.register(this);}
  public void refreshData(){/*...*/}
}

 

分享到:
评论

相关推荐

    Observer观察者模式

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

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

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

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

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

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

    观察者模式 概述 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 适用性 1.当一个抽象模型有两个方面,其中一个方面依赖于另一方面。 将这二者封装...

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

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

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

    "ObserverPattern(订阅模式)3.zip"中的代码可能进一步阐述了观察者模式,这里的“订阅”一词可能意味着用户可以订阅特定的主题,只有当这些主题的状态改变时,用户才会收到通知。这与传统的观察者模式类似,但更加...

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

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

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

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

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

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

    观察者模式Observer

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

    观察者模式(Observer)

    观察者模式(Observer)是一种行为设计模式,它允许你定义一个订阅机制,可以在对象状态变化时通知多个“观察”该对象的其他对象。这个模式在软件工程中扮演着重要角色,尤其是在事件驱动编程和发布/订阅系统中。...

    观察者模式(Observer)

    观察者模式(Observer)是一种行为设计模式,它允许你定义一个订阅机制,可以在对象状态变化时通知多个“观察”该对象的其他对象。这个模式在软件工程中广泛应用于事件驱动编程,例如用户界面组件的交互或者系统状态的...

    观察者模式,Observer

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

Global site tag (gtag.js) - Google Analytics