ABAP-OO:(3)类的事件
一、事件是什么官方严谨定义事件是 ABAP 面向对象中类与类之间实现松耦合通信的机制。一个类可以定义事件、触发事件其他类可以注册监听这个事件事件触发后系统自动调用注册好的处理方法触发方不关心谁处理处理方不关心谁触发→ 完全解耦简单举例闹钟响起人”听到“闹钟响起会自动起床假设定义闹钟类具备闹钟响起的功能定义人“类”具备起床的功能那么”听到”则把”闹钟“和”人类“的功能绑定起来定义事件我是一个闹钟我具备一个功能某个时间点会响铃ring触发事件时间到我响铃了注册监听人准备听到闹钟响应事件人听到这个闹钟响我就起床二、事件三要素固定结构触发类定义事件 触发事件RAISE EVENT处理类编写事件处理方法注册监听SET HANDLER 绑定事件与处理方法三、示例示例代码REPORT ztest_alarm_event. *----------------------------------------------------------------------* * 1. 【闹钟类】事件发出者会响铃 *----------------------------------------------------------------------* CLASS lcl_alarm DEFINITION. PUBLIC SECTION. EVENTS: ring. 1️⃣ 定义事件闹钟响了 METHODS: start. 闹钟启动 ENDCLASS. CLASS lcl_alarm IMPLEMENTATION. METHOD start. WRITE: / 闹钟时间到叮铃铃~~~. RAISE EVENT ring. 2️⃣ 触发事件响铃 ENDMETHOD. ENDCLASS. *----------------------------------------------------------------------* * 2. 【人类】事件处理者听到铃声就起床 *----------------------------------------------------------------------* CLASS lcl_person DEFINITION. PUBLIC SECTION. METHODS: get_up FOR EVENT ring OF lcl_alarm. 3️⃣ 事件处理方法 ENDCLASS. CLASS lcl_person IMPLEMENTATION. METHOD get_up. WRITE: / 我听到闹钟起床上班啦. ENDMETHOD. ENDCLASS. *----------------------------------------------------------------------* * 3. 主程序把它们绑定在一起 *----------------------------------------------------------------------* START-OF-SELECTION. 创建对象 DATA(lo_alarm) NEW lcl_alarm( ). DATA(lo_person) NEW lcl_person( ). 4️⃣ 注册监听人监听闹钟 SET HANDLER lo_person-get_up FOR lo_alarm. 启动闹钟 → 自动响铃 → 人自动起床 lo_alarm-start( ).运行结果四、事件 vs 普通方法调用为什么要用事件表格方式耦合度调用关系适用场景普通方法调用高耦合A 直接调用 B明确知道要调用谁事件低耦合A 触发B 监听不知道谁处理、多人处理事件优势触发方和处理方互不依赖可一对多通知代码更易扩展、更符合 Clean Core
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2568187.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!