【中国大学MOOC】java程序设计-week5-附件是一个模拟事件消息订阅的程序,请阅读并修改

本文介绍了如何在Java NewsDemo程序中,使用匿名类和Lambda表达式为新闻订阅者添加功能。通过实战演示,读者将学习如何为NewsAgency实例添加新的监听器,并理解这两种技术在事件处理中的应用。
摘要由CSDN通过智能技术生成

1.题目

附件是一个模拟事件消息订阅的程序,请阅读并修改。

主要是加上一个自已的订阅者,并且该订阅者要用匿名类来实现。(基本要求占8分)

如果可以,也加上用Lambda来实现的订阅者。(较高要求,占2分)。

附件链接:
week5-NewsDemo.zip

2.题解

常规方法实现,匿名类,lambda表达式 三种方法如代码所示

/**
 *  一个简单的新闻事件侦听演示程序
 * @author tds
 * @author 修改者:
 */
 
public class NewsDemo {
   public static void main(String[] args) {
       
      //模拟有一家新闻社
      NewsAgency bbc = new NewsAgency("BBC");
      //订阅该社的新闻
      bbc.addListener(new MyListener());
       
      //TODO 请在这里再加入一个Listener
 
      // 匿名类做法
      bbc.addListener(new Listener(){
         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:\n 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!");
   }
}
  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值