关于Java的一点问题

/***一个简单的新闻事件侦听演示程序*@authortds*@author修改者:*/publicclassNewsDemo{publicstaticvoidmain(... /**
* 一个简单的新闻事件侦听演示程序
* @author tds
* @author 修改者:
*/

public class NewsDemo {
public static void main(String[] args) {

//模拟有一家新闻社
NewsAgency bbc = new NewsAgency("BBC");
//订阅该社的新闻
bbc.addListener(new MyListener());

//TODO 请在这里再加入一个Listener

//新闻社启动其工作流程
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 + " happed!");
}
}

这是一个模拟事件消息订阅的程序,请阅读并修改。
主要是加上一个自已的订阅者,并且该订阅者要用匿名类来实现。
如果可以,也加上用Lambda来实现的订阅者。
展开
 我来答
yinfengnong
2018-04-14 · TA获得超过5618个赞
知道大有可为答主
回答量:2344
采纳率:89%
帮助的人:2251万
展开全部

部分代码如下:

// 使用匿名类实现
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 + " happed!");
}
});

// 使用 Lambda 表达式实现
bbc.addListener(e -> {
if (e.level > 5)
System.out.println("warning :");
System.out.println("please note," + e.text + " happed!");
});

完整代码:

public class NewsDemo {
public static void main(String[] args) {

// 模拟有一家新闻社
NewsAgency bbc = new NewsAgency("BBC");

// 订阅该社的新闻
bbc.addListener(new MyListener());

// TODO 请在这里再加入一个Listener

// 使用匿名类实现
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 + " happed!");
}
});

// 使用 Lambda 表达式实现
bbc.addListener(e -> {
if (e.level > 5)
System.out.println("warning :");
System.out.println("please note," + e.text + " happed!");
});

// 新闻社启动其工作流程
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 + " happed!");
}
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式