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