`

观察者模式

 
阅读更多
利用观察者模式建立的事件监听系统,主要步骤是

EventObject 是所有事件的根类

EventListener 是所有监听器接口的根接口

Java事件监听模式:


1、事件 ( extends EventObject):定义事件,继承EventObject的属性和方法
2、监听器接口 ( extends EventListener):继承EventListener接口
3、注册器:实现注册器操作方法、事件广播方法,定义事件触发条件
4、事件监听器 (extends MyEventListenerInterface):注册监听器、定义事件处理方法



A new custom event must extends EventObject. Moreover, an event listener interface must be declared to allow objects to

receive the new custom event. All listeners must extend from EventListener.

1、事件MyEvent,继承EventObject事件

This example demonstrates all the steps necessary to create a new custom event.

// Declare the event. It must extend EventObject.  

public class MyEvent extends EventObject {       
       public MyEvent(Object source) {        
                super(source);       
        } 
  }

2、监听接口MyEventListenerInterface
    // Declare the listener class. It must extend EventListener.   
    // A class must implement this interface to get MyEvents.  
    public interface MyEventListener extends EventListener {     
            public void myEventOccurred(MyEvent evt);  
  }
3、注册器MyEventRegister
  
// Add the event registration and notification code to a class.  
   public class MyEventRegister {      
    protected Vector listenerList=new Vector();       
    private int value;       
    public void setValue(int newValue){         
          if(value!=newValue){         
              value=newValue;          
              MyEvent evt=new MyEvent(this,newValue);         
               fireMyEvent(evt);            }        }      

   public synchronized void addMyEventListener(MyEventListener listener){         
                       listenerList.add(listener);      
   }       


   public synchronized void removedMyEventListener(MyEventListener listener){                                           

listenerList.removeElement(listener);      
    }      


    public void fireMyEvent(MyEvent evt){         
      Vector currentListenerList=null;           
       synchronized(this){              
         currentListenerList=(Vector)listenerList.clone();            }          
         for(int i=0;i<currentListenerList.size();i++){              
              MyEventListener listener=              (MyEventListener)currentListenerList.elementAt(i);               
              listener.myEventOccurred(evt);           
           }       
       } 
   }


4、事件监听器MyEventListener
    public class MyEventListener implements MyEventListenerInterface{       
         public MyEventListener(MyEventRegister register){          
             register.addMyEventListener(this);      
    } 
    
            public void myEventOccurred(MyEvent evt){                       
           System.out.println("事件发生了...");     
      }   
   }






























自己创建事件监听系统时,主要有以下几步:
1.创建事件类,事件类必须继承EventObject类,例如:

       package com.cxm;

      import java.util.EventObject;

       public class MyEvent extends EventObject {

public MyEvent(Object source) {
super(source);
}

/**
*
*/
private static final long serialVersionUID = 525828850067101202L;

}

2.创建监听器接口,该接口必须接触EventListener接口,例如:
 
   package com.cxm;

import java.util.EventListener;

public interface NyEventListener extends EventListener{

         //在监听器接口中定义某事件发生时,要调用的方法
public void myEventOccured(MyEvent me);

}


3.创建事件源,在事件源中当某事件发生时,必须手动抛出该事件(不像swing中的button,系统已经做好了,当事件发生时,该类自动会把事

件抛出),然后在调用相应的事件监听方法
public class MyEventSource {
protected Vector listenerList = new Vector();
private int value;

public void setValue(int newValue) {
if (value != newValue) {
value = newValue;
MyEvent evt = new MyEvent(newValue);
fireMyEvent(evt);
}
}

public synchronized void addMyEventListener(NyEventListener listener) {
listenerList.add(listener);
}

public synchronized void removedMyEventListener(NyEventListener listener) {

listenerList.removeElement(listener);
}

public void fireMyEvent(MyEvent evt) {
Vector currentListenerList = null;
synchronized (this) {
currentListenerList = (Vector) listenerList.clone();
}
for (int i = 0; i < currentListenerList.size(); i++) {
NyEventListener listener = (NyEventListener) currentListenerList
.elementAt(i);
                        //如果这样实现事件监听系统,就没有必要实现EventObject和EventListener
                        //实现这两个类主要不是为了功能上的监听,而是为了调用方法的统一
listener.myEventOccured(evt);
}
}
}
  

4.测试事件监听系统,如下:
public class MainEvent {

public static void main(String args[]){
MyEventSource mr=new MyEventSource ();
mr.addMyEventListener(new NyEventListener(){

public void myEventOccured(MyEvent me) {
// TODO Auto-generated method stub
System.out.println("sss");
}

});

mr.setValue(0);
mr.setValue(9);
mr.setValue(93);

}

}





分享到:
评论

相关推荐

    设计模式实现——观察者模式

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

    java 设计模式 观察者模式 简单实例 包括测试test类

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

    Qt设计模式之观察者模式

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

    java观察者模式观察者模式

    观察者模式是设计模式中的一种行为模式,它在Java编程中有着广泛的应用。该模式的主要目的是定义对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式也被...

    设计模式-观察者模式(讲解及其实现代码)

    观察者模式,也被称为发布-订阅模式,是软件设计中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式在分布式系统、事件驱动...

    Java内置观察者模式

    观察者模式(Observer Pattern)是设计模式中的一种行为模式,它允许一个对象,当其状态发生改变时,能够自动通知所有依赖它的其他对象。在Java中,这种模式已经被内置到语言核心,使得开发者可以轻松地实现事件驱动...

    设计模式--观察者模式java例子

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

    观察者模式模版和例子

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

    设计模式之观察者模式Java实现

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

    运用MVC模式及观察者模式的java小程序

    在这个名为“运用MVC模式及观察者模式的java小程序”的项目中,我们重点探讨了两种经典的设计模式:Model-View-Controller(MVC)模式和Observer(观察者)模式。这两种模式在JavaWeb开发中扮演着至关重要的角色。 ...

    iOS 设计模式 观察者模式

    观察者模式,也被称为发布-订阅(Publish-Subscribe)模式,是软件设计中的一种行为模式。在iOS开发中,它是一种让多个对象监听或订阅某一个主题对象的状态变化,并在状态变化时自动收到通知的方式。这种模式使得...

    56丨观察者模式(上):详解各种应用场景下观察者模式的不同实现方式1

    观察者模式详解 观察者模式(Observer Design Pattern)是行为型设计模式的一种,主要解决的是“类或对象之间的交互”问题。它定义了一个一对多的依赖关系,当一个对象的状态改变时,所有依赖的对象都会自动收到...

    观察者模式编写的股票分析程序

    观察者模式(Observer Pattern)是一种行为设计模式,它允许你定义一个订阅机制,可以在对象状态改变时通知多个“观察”该对象的其他对象。在这个"股票分析程序"中,我们很显然看到它利用了这种模式来实时更新股票...

    设计模式之观察者模式

    观察者模式是面向对象设计中的一种经典模式,它在软件工程中扮演着重要的角色,用于实现对象间的松耦合。这种模式定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并...

    观察者模式源码

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

    观察者模式代码

    观察者模式是一种行为设计模式,它允许你定义一个订阅机制,可以在对象状态改变时通知多个“观察”该对象的其他对象。在Java或其他面向对象语言中,这种模式通常用于实现事件处理或发布/订阅系统。在给定的“观察者...

    观察者模式练习

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

    Unity3D设计模式之观察者模式

    ### Unity3D设计模式之观察者模式 #### 观察者模式概述 观察者模式(Observer Pattern)是一种软件设计模式,属于行为型模式之一。它定义了对象间的一种一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它...

    观察者模式的一个应用

    ### 观察者模式概述与应用 #### 一、观察者模式定义 观察者模式是一种常用的软件设计模式,主要用于处理对象间的依赖关系。在这种模式下,一个对象(称为“主题”或“被观察者”)负责维护一组依赖于它的对象...

Global site tag (gtag.js) - Google Analytics