`
zengshaotao
  • 浏览: 777441 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

java本身的观察者模式

    博客分类:
  • java
 
阅读更多

import java.util.Observable;
import java.util.Observer;

/**
 * 一个观察者观察多个被观察者
 * @author zengst
 * @date
 */
public class ObserverTest {
 public static void main(String args[]){
  
  BeingWatched2 bw2 = new BeingWatched2();
  BeingWatched1 bw1 = new BeingWatched1();
  Watch w = new Watch();
  bw2.addObserver(w);
  bw1.addObserver(w);
  
  bw2.counter2();
  bw1.counter1();
 }
}

class Watch implements Observer{
 
 //这里的args是被观察者调用notifyObservers方法时传递的参数
 //这里的o是被观察者的父类,因为一个观察者可以观者多个被观察者
 //所以这里无法直接通过o调用某一个被观察者定义的方法
 @Override
 public void update(Observable o, Object arg) {
  
  if(o instanceof BeingWatched2){
   
   BeingWatched2 w = (BeingWatched2) o;
   System.out.println("我是第二个被观察者"+arg);
   System.out.println("################"+w.cry());
   System.out.println("@@@@@@@@@@@@@@@@"+o.toString());
   
  }else if(o instanceof BeingWatched1){
   
   BeingWatched1 w = (BeingWatched1) o;
   System.out.println("我是第一个被观察者"+arg);
   System.out.println("################"+w.cry());
   System.out.println("@@@@@@@@@@@@@@@@"+o.toString());
  }
  
 }
}
class BeingWatched2 extends Observable{
 public int j =888;
 
 public int cry(){
  System.out.println("I am crying--"+j);
  return j;
 }
 void counter2(){
  try{
   for(int i=0; i<5;i++){
    setChanged();
    notifyObservers(i+"第二个被观察者");
    Thread.sleep(1000);
   }
  }catch(Exception e){
   e.printStackTrace();
  }
 }
}

class BeingWatched1 extends Observable{
 public int j =999;
 
 public int cry(){
  System.out.println("I am crying--"+j);
  return j;
 }
 void counter1(){
  try{
   for(int i=0; i<5;i++){
    setChanged();
    notifyObservers(i+"第一个被观察者");
    Thread.sleep(1000);
   }
  }catch(Exception e){
   e.printStackTrace();
  }
 }
}

 

 

分享到:
评论

相关推荐

    观察者模式源代码_java

    在Java中,观察者模式的实现通常依赖于`java.util.Observable`类和`java.util.Observer`接口。`Observable`类代表被观察的对象,而`Observer`接口则是观察者的接口。以下是对这两个关键组件的详细解释: 1. `...

    java 设计模式 观察者 源码

    观察者模式(有时又被称为发布(publish )-订阅(Subscribe)模式、模型-视图(View)模式、源-收听者(Listener)模式或从属者模式)是软件设计模式的一种。在此种模式中,一个目标物件管理所有相依于它的观察者物件...

    观察者模式(Observer)

    - **顺序问题**:通知观察者时,可能会有特定的执行顺序要求,但观察者模式本身无法保证。 - **过多的通知**:如果不恰当使用,可能导致观察者收到过多不必要的通知。 **源码实现** 在Java中,`java.util....

    设计模式之观察者模式

    在Java中,`java.util.Observable`和`java.util.Observer`类提供了内置的观察者模式支持。而在Python等其他语言中,可以通过自定义类来实现观察者模式。 以`ObserverTest`为例,这可能是一个测试用例,用于验证观察...

    观察者模式

    观察者设计模式观察者模式(有时又被称为发布-订阅模式、模型-视图模式、源-收听者模式或从属者模式)是软件设计模式的一种。在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时...

    策略模式工厂方法模式观察者模式

    本资源主要涵盖了三种经典的设计模式:策略模式、工厂方法模式以及观察者模式,对于初学者来说是非常有价值的学习资料。 **策略模式**是一种行为设计模式,它使你能在运行时改变对象的行为。在策略模式中,一个类的...

    Java的事件模式Java的事件模式

    - **直接融合**:应用客户端本身就是观察者,两者合二为一,确保了最快速的事件响应。 - **推方式**(Push):观察者检测到事件后立即通过消息推送至应用客户端,主动传递事件信息。 - **拉方式**(Pull):应用...

    Java回调函数与观察者模式实例代码

    观察者模式是一种软件设计模式,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。 Java 中通过 Observable 类和 Observer 接口实现了观察者模式。 在 Java 中,观察者模式可以...

    java 23种设计模式及具体例子

    * 观察者模式:观察者模式是一种行为型模式,它可以将对象之间的关系建立在观察者和被观察者之间,以便于更好地实现对象之间的关系。 * 迭代子模式:迭代子模式是一种行为型模式,它可以将对象之间的关系建立在迭代...

    Java与模式(阎宏经典版)

    在Java中,`java.util.Observable`和`java.util.Observer`接口就是观察者模式的体现。 4. **装饰器模式**:动态地给一个对象添加一些额外的职责,增加功能而不影响其他对象。在Java IO流中,`BufferedReader`、`...

    Java设计模式刘伟书本中模拟考试答案

    观察者模式定义了对象之间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。观察者模式主要包含两个角色:被观察对象(Subject)和观察者(Observer)。Subject维护一...

    java设计模式高清教程

    行为型模式主要处理对象间的交互和责任分配,包括策略模式(Strategy)、观察者模式(Observer)和模板方法模式(Template Method)等。 本教程的"05最佳实践"部分可能涵盖了如何在实际项目中有效应用这些设计模式...

    从Java类库看设计模式

    该模式通常涉及到两类对象:`Subject`(主题)和`Observer`(观察者)。 - **Subject**(主题):持有观察者的列表,并在状态发生变化时通知所有观察者。 - **Observer**(观察者):订阅主题的变化,当主题状态...

    Java与模式

    3. **行为型模式**:包括责任链模式(Chain of Responsibility)、命令模式(Command)、解释器模式(Interpreter)、迭代器模式(Iterator)、中介者模式(Mediator)、备忘录模式(Memento)、观察者模式...

    设计模式JAVA(学习java模式的一本好书)

    - **观察者模式**:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 - **优点**:目标和观察者之间是抽象耦合的。 - **应用场景**:一个抽象模型有...

    常用设计模式及Java程序 pdf

    - **观察者模式**:利用Java内置的Observable和Observer类轻松实现。 - **装饰者模式**:通过继承实现,可以在运行时为对象添加职责。 #### 结论 设计模式是软件开发中不可或缺的一部分,尤其在Java这样的面向对象...

    Java设计模式帮助文档

    行为型模式着重于对象之间的责任分配,包括策略模式(Strategy)、观察者模式(Observer)、命令模式(Command)等。策略模式定义了一系列算法,并将每个算法封装起来,使它们可以互相替换,让算法独立于使用它的...

    java设计模式选择题复习

    #### 观察者模式的推拉差异及其适用场景 - **推模式**:具体主题将变化后的数据直接推送给观察者。 - **优点**:高效、实时性强。 - **缺点**:精确性较差,无法确保所有观察者都能收到消息。 - **适用场景**:...

Global site tag (gtag.js) - Google Analytics