Java程序设计 北京大学 Week5互评作业

java程序设计mooc攻略

单元测验互评作业考试
week1测验2019冬期中测验
week2测验week2互评作业2019冬期末测验
week3测验week3互评作业
week4测验week4互评作业
week5测验week5互评作业
week6测验week6互评作业
week7测验week7互评作业
week8测验week8互评作业
week9测验week9互评作业
week10测验week10互评作业
week11测验吃不消,我自己是github上找了个项目上去

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

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

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

import java.io.ObjectStreamException;

/**
 *  一个简单的新闻事件侦听演示程序
 * @author tds
 * @author 修改者:Jaycee Chow
 */

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

        //模拟有一家新闻社
        NewsAgency bbc = new NewsAgency("BBC");
        //订阅该社的新闻
        bbc.addListener(new MyListener());
        bbc.addListener(new MyListener(){
            public void newsArrived(NewsEvent e){
                if( e.level>5) System.out.println("warning :");
                System.out.println("please note," + e.text + " happed!");
            }
        });
        bbc.addListener((e)->{
            if( e.level>5) System.out.println("warning :");
            System.out.println("please note," + e.text + " happed!");
        });

        //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!");
    }
}
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值