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!");
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章