Java event monitoring processing mechanism

table of Contents

Java event monitoring processing mechanism

1. Three major components of java events

2. Code sample

2.1 Define the event object (car status):

2.2 Define event listeners (observers)

2.3 Define a manager (observed)

2.4 Define the test class:


1. Three major components of java events

1. EventObject: event state object, generally custom event object to inherit the parent object

2. EventSource: Event source, such as a click event, a data modification change, etc. can all be used as the event source

3. EventListener: event listener, for events that occur, we may need to take corresponding actions, this time we need to use listeners to achieve. EventListener is an interface, which can be implemented from the operation implementation method.


With the occurrence of events, the corresponding state is usually encapsulated in the event state object, which must inherit from java.util.EventObject.

The event state object is passed as a single parameter to the listener method that should respond to the event. The identification of the event source that emits a specific event is: follow the prescribed design format to define the registration method for the event listener, and accept the reference to the specified event listener interface instance.

Specifically for the monitored event class, when it listens to the event object, it calls the corresponding method for processing.


2. Code sample

This sample scenario is as follows: There is a vehicle owner, he has two cars, a Mercedes-Benz and a BMW. At some point, he will issue instructions, saying that forward and backward, BMW and Mercedes-Benz should perform corresponding actions according to his instructions.

2.1 Define the event object (car status):

package com.multithread.learn.eventListener;

import java.util.EventObject;

/**
 * 定义一个事件的对象,继承EventObject;
 */
public class CarEvent extends EventObject {

    private static final long serialVersionUID = 1L;

    // 汽车的状态
    private String carStatue = "";

    /**
     * Constructs a prototypical Event.
     *
     * @param source The object on which the Event initially occurred.
     * @throws IllegalArgumentException if source is null.
     */
    public CarEvent(Object source,String carStatue) {
        super(source);
        this.carStatue = carStatue;
    }

    public static long getSerialVersionUID() {
        return serialVersionUID;
    }

    public String getCarStatue() {
        return carStatue;
    }

    public void setCarStatue(String carStatue) {
        this.carStatue = carStatue;
    }
}

2.2 Define event listeners (observers)

a. First define a listener interface

package com.multithread.learn.eventListener;

import java.util.EventListener;

/**
 * 定义监听接口,负责监听CarEvent事件,在监听到事件以后执行具体的操作
 */
public interface CarListener extends EventListener {

    void carEvent(CarEvent event);

}

b. Define two implementations

package com.multithread.learn.eventListener;

import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;

@Slf4j
public class CarListener1 implements CarListener {

    @Override
    public void carEvent(CarEvent event) {
        if(StringUtils.isNotEmpty(event.getCarStatue())){
            switch (event.getCarStatue()){
                case "open":
                    log.info("奔驰车门已打开");
                    break;
                case "d":
                    log.info("奔驰前进");
                    break;
                case "p":
                    log.info("奔驰停车");
                    break;
                case "r":
                    log.info("奔驰倒车");
                    break;
                case "s":
                    log.info("奔驰运动模式");
                    break;
                default:
                     log.info("奔驰未知状态");
                     break;
            }
        }
    }
}

 

package com.multithread.learn.eventListener;

import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;

@Slf4j
public class CarListener2 implements CarListener {

    @Override
    public void carEvent(CarEvent event) {
        if(StringUtils.isNotEmpty(event.getCarStatue())){
            switch (event.getCarStatue()){
                case "open":
                    log.info("宝马车门已打开");
                    break;
                case "d":
                    log.info("宝马前进");
                    break;
                case "p":
                    log.info("宝马停车");
                    break;
                case "r":
                    log.info("宝马倒车");
                    break;
                case "s":
                    log.info("宝马运动模式");
                    break;
                default:
                    log.info("宝马未知状态");
                    break;
            }

        }
    }
}

2.3 Define a manager (observed)

package com.multithread.learn.eventListener;

import java.util.HashSet;
import java.util.Set;

/**
 * 事件源对象,在这里你可以把它想象成一个控制车的挡位。
 * (如果是在swing中,就类似一个button)
 */
public class CarManager {

    private Set<CarListener>  set = new HashSet<>();

    /**
     * 添加事件
     */
    public void addCarListener(CarListener carListener){
        set.add(carListener);
    }

    /**
     * 移除监听事件
     */
    public void removeCarListener(CarListener carListener){
        set.remove(carListener);
    }


    /**
     * 触发开车事件
     */
    protected void dCar(){
        CarEvent carEvent = new CarEvent(this,"d");
        this.notifyListeners(carEvent);
        System.out.println("开车事件");
    }

    /**
     * 触发倒车事件
     */
    protected void rCar(){
        CarEvent carEvent = new CarEvent(this,"r");
        this.notifyListeners(carEvent);
        System.out.println("倒车事件");
    }

    /**
     * 通知所有监听器执行
     * @param carEvent
     */
    private void notifyListeners(CarEvent carEvent){
        if(!set.isEmpty()){
            for(CarListener item : set){
                item.carEvent(carEvent);
            }
        }
    }
}

 

2.4 Define the test class:

package com.multithread.learn.eventListener;

public class MainTest {
    public static void main(String[] args) {
        CarManager manager = new CarManager();
        manager.addCarListener(new CarListener1());
        manager.addCarListener(new CarListener2());

        System.out.println("开始");

        manager.dCar();
        System.out.println("开了一段距离");

        manager.rCar();
        System.out.println("倒车完成");
    }
}

 

2.5 Running results:

开始
12:01:06.187 [main] INFO com.multithread.learn.eventListener.CarListener1 - 奔驰前进
12:01:06.191 [main] INFO com.multithread.learn.eventListener.CarListener2 - 宝马前进
开车事件
开了一段距离
12:01:06.192 [main] INFO com.multithread.learn.eventListener.CarListener1 - 奔驰倒车
12:01:06.192 [main] INFO com.multithread.learn.eventListener.CarListener2 - 宝马倒车
倒车事件
倒车完成

 

Guess you like

Origin blog.csdn.net/qq_37488998/article/details/111523719