You need to enable JavaScript to run this app.
最新活动
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

弱事件模式对源和监听器都弱吗?

弱事件模式是一种设计模式,它在事件传递的过程中使用弱引用,以避免因为强引用导致的内存泄漏。因此,它是对于源和监听器都弱的。

以下是使用弱事件模式的示例。假设我们有一个“Person”类,每个“Person”实例都可以注册在一个“EventManager”上。我们使用弱事件模式来监听“Person”的变化:

public class Person {
    private String name;
    private int age;
    private EventManager eventManager;

    public Person(String name, int age, EventManager eventManager) {
        this.name = name;
        this.age = age;
        this.eventManager = eventManager;
    }

    public void setName(String name) {
        this.name = name;
        this.eventManager.notifyListeners(new PropertyChangeEvent(this, "name", null, name));
    }

    public void setAge(int age) {
        this.age = age;
        this.eventManager.notifyListeners(new PropertyChangeEvent(this, "age", null, age));
    }
}

public class EventManager {
    private Map<String, List<WeakReference<EventListener>>> listeners = new HashMap<>();

    public void addListener(String eventName, EventListener listener) {
        List<WeakReference<EventListener>> eventListeners = listeners.computeIfAbsent(eventName, k -> new ArrayList<>());
        eventListeners.add(new WeakReference<>(listener));
    }

    public void notifyListeners(PropertyChangeEvent event) {
        List<WeakReference<EventListener>> eventListeners = listeners.get(event.getPropertyName());
        if (eventListeners != null) {
            for (Iterator<WeakReference<EventListener>> it = eventListeners.iterator(); it.hasNext(); ) {
                WeakReference<EventListener> reference = it.next();
                EventListener listener = reference.get();
                if (listener == null) {
                    it.remove(); // remove the dead listener
                } else {
                    listener.propertyChanged(event); // notify the listener
                }
            }
        }
    }
}

public interface EventListener {
    void propertyChanged(PropertyChangeEvent event);
}

public class MyEventListener implements EventListener {
    @Override
    public void propertyChanged(Property
本文内容通过AI工具匹配关键字智能整合而成,仅供参考,火山引擎不对内容的真实、准确或完整作任何形式的承诺。如有任何问题或意见,您可以通过联系service@volcengine.com进行反馈,火山引擎收到您的反馈后将及时答复和处理。
展开更多
面向开发者的云福利中心,ECS 60元/年,域名1元起,助力开发者快速在云上构建可靠应用

社区干货

特惠活动

热门爆款云服务器

100%性能独享,更高内存性能更佳,学习测试、web前端、企业应用首选,每日花费低至0.55元
60.00/1212.00/年
立即购买

域名注册服务

cn/top/com等热门域名,首年低至1元,邮箱建站必选
1.00/首年起32.00/首年起
立即购买

DCDN国内流量包100G

同时抵扣CDN与DCDN两种流量消耗,加速分发更实惠
2.00/20.00/年
立即购买

弱事件模式对源和监听器都弱吗? -优选内容

接入流程
开发者可以通过配置建连超时 PARAMS_KEY_TTS_CONN_TIMEOUT_INT 和接收超时 PARAMS_KEY_TTS_RECV_TIMEOUT_INT 两个参数来控制切换的敏感程度。下面介绍 SDK 支持的几种合成模式: 在线合成 TTS_WORK_MODE_ONLINE:只进行在线合成,不需要配置离线合成相关参数; 离线合成 TTS_WORK_MODE_OFFLINE:只进行离线合成,不需要配置在线合成相关参数; 在线优先 TTS_WORK_MODE_ALTERNATE:优先发起在线合成,失败后(网络错误),启动离线合成引擎开始...

弱事件模式对源和监听器都弱吗? -相关内容

特惠活动

热门爆款云服务器

100%性能独享,更高内存性能更佳,学习测试、web前端、企业应用首选,每日花费低至0.55元
60.00/1212.00/年
立即购买

域名注册服务

cn/top/com等热门域名,首年低至1元,邮箱建站必选
1.00/首年起32.00/首年起
立即购买

DCDN国内流量包100G

同时抵扣CDN与DCDN两种流量消耗,加速分发更实惠
2.00/20.00/年
立即购买

产品体验

体验中心

云服务器特惠

云服务器
云服务器ECS新人特惠
立即抢购

白皮书

一图详解大模型
浓缩大模型架构,厘清生产和应用链路关系
立即获取

最新活动

爆款1核2G共享型服务器

首年60元,每月仅需5元,限量秒杀
立即抢购

火山引擎增长体验专区

丰富能力激励企业快速增长
查看详情

数据智能VeDI

易用的高性能大数据产品家族
了解详情

一键开启云上增长新空间

立即咨询