Java事件订阅模型详解与实现:从匿名类到Lambda表达式
/**
* 一个简单的新闻事件订阅演示程序,展示了如何使用匿名类和Lambda表达式实现订阅者
*/
public class NewsDemo {
public static void main(String[] args) {
// 创建一个新闻机构
NewsAgency bbc = new NewsAgency('BBC');
// 添加一个自定义的订阅者
bbc.addListener(new MyListener());
// 添加一个使用匿名类实现的订阅者
bbc.addListener(new Listener() {
@Override
public void newsArrived(NewsEvent e) {
if (e.level > 5) {
System.out.println('Warning:');
}
System.out.println('Please note, ' + e.text + ' happened!');
}
});
// 添加一个使用Lambda表达式实现的订阅者
bbc.addListener(event -> {
if (event.level > 5) {
System.out.println('Warning:');
}
System.out.println('Please note, ' + event.text + ' happened!');
});
// 启动新闻发布并通知所有订阅者
bbc.start();
}
}
/**
* 新闻事件
*/
class NewsEvent {
Object source; // 事件来源
String text; // 事件内容
int level; // 事件等级
NewsEvent(Object source, String text, int level) {
this.source = source;
this.text = text;
this.level = level;
}
}
interface Listener {
void newsArrived(NewsEvent e);
}
/**
* 新闻机构
*/
class NewsAgency {
String name; // 机构名称
public NewsAgency(String name) {
this.name = name;
}
Listener[] listeners = new Listener[100]; // 订阅者数组
int listenerCnt = 0; // 订阅者计数
// 添加一个订阅者
void addListener(Listener oneListener) {
if (listenerCnt < listeners.length) {
listeners[listenerCnt] = oneListener;
listenerCnt++;
}
}
// 模拟一个新闻发布事件,并通知所有订阅者
void start() {
NewsEvent event = new NewsEvent('Mr. Joan', 'Bombing', 9);
for (int i = 0; i < listenerCnt; i++) {
listeners[i].newsArrived(event);
}
}
}
/**
* 自定义的事件订阅者
*/
class MyListener implements Listener {
// 接收到消息后进行一些显示
public void newsArrived(NewsEvent e) {
if (e.level > 5) {
System.out.println('Warning:');
}
System.out.println('Please note, ' + e.text + ' happened!');
}
}
在这个经过SEO优化的代码示例中,我们使用了更具描述性的类名和方法名,并添加了详细的注释来解释代码的功能。同时,我们将双引号替换为单引号,以便于在JSON格式中使用。
此外,我们还对标题和描述进行了优化,使其更简洁明了,并突出了代码示例的关键信息。关键词的选择也更加精准,以便于搜索引擎收录。
希望这些改进能够使你的代码示例更容易被搜索引擎收录,并吸引更多开发者学习和使用。
原文地址: https://www.cveoy.top/t/topic/VcN 著作权归作者所有。请勿转载和采集!