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!");
    }
}

你可能感兴趣的:(Java程序设计 北京大学 Week5互评作业)