【设计模式】监听者模式

监听者模式在Java SDK开发中的应用

监听者模式(Observer Pattern)是一种设计模式,它定义了对象间的一对多依赖关系,使得当一个对象(主题)状态发生变化时,所有依赖于它的对象(观察者)都会得到通知并自动更新。在Java SDK开发中,监听者模式可以用于多种场景,包括但不限于事件处理、组件通信、框架集成等。

Java中的监听者模式实现

在Java中,监听者模式通常通过定义接口和实现类来实现。Observable和Observer是Java内置的用于实现观察者模式的类。Observable类是一个可以被观察的对象,它维护了一个观察者列表,并提供了添加、删除和通知观察者的方法。Observer接口定义了更新方法,当主题的状态发生变化时,观察者的更新方法会被调用。

此外,Java还提供了EventListener和EventObject类,这些类用于实现更为通用的事件监听机制。EventListener是一个标记性接口,而EventObject提供了一个注册事件源的构造方法,以及存储事件源的属性。

示例代码

以下是一个简化的Java监听者模式的示例代码,展示了如何定义事件源、事件对象和监听器接口,以及如何注册和触发事件:

// 定义事件源接口
public interface EventSource {
    void addEventListener(EventListener listener);
    void removeEventListener(EventListener listener);
    void triggerEvent();
}

// 定义事件对象
public class EventObject implements Serializable {
    protected transient Object source;
    public EventObject(Object source) {
        this.source = source;
    }
    // getter and other methods
}

// 定义事件监听者接口
public interface EventListener {
    void onEvent(EventObject event);
}

// 实现事件源类
public class ConcreteEventSource implements EventSource {
    private List<EventListener> listeners = new ArrayList<>();

    @Override
    public void addEventListener(EventListener listener) {
        listeners.add(listener);
    }

    @Override
    public void removeEventListener(EventListener listener) {
        listeners.remove(listener);
    }

    @Override
    public void triggerEvent() {
        EventObject event = new EventObject(this);
        for (EventListener listener : listeners) {
            listener.onEvent(event);
        }
    }
}

// 使用示例
public class Main {
    public static void main(String[] args) {
        ConcreteEventSource source = new ConcreteEventSource();
        source.addEventListener(new EventListener() {
            @Override
            public void onEvent(EventObject event) {
               System.out.println("Event received by listener.");
            }
        });
        source.triggerEvent();
    }
}

在上述代码中,ConcreteEventSource是一个具体的事件源实现,它维护了一个事件监听者的列表,并提供了添加、移除和触发事件的方法。EventObject是一个事件对象,它持有事件源的引用。EventListener是一个接口,定义了当事件发生时应该执行的操作。在main方法中,我们创建了一个ConcreteEventSource实例,并注册了一个匿名实现了EventListener接口的类,然后触发了事件,导致注册的监听器接收到了事件并打印了消息。

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值