请用Java类库中的Observerable和Observer实现报纸订阅功能,具体要求如下:
• 报纸类,具有报纸名称和报纸内容,让报纸内容发生变化时,能够通知订阅者
• 订阅者类,具有人名和阅读报纸的功能,能够在控制台输出阅读信息,形如“张三阅读了威海日报,内容是。。。”
• 在控制台中,任意生成一份报纸和若干订阅者,通过设置报纸内容,检验观察者模式的执行情况。
UML类图:
Java程序代码:
报纸类
package com.observerpattern;
import java.util.Observable;
public class Newspaper extends Observable{
private String name;//报纸名称
private String content;//报纸内容
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getContent() {
return content;
}
//报纸内容发生变化时,通知订阅者
public void setContent(String content) {
this.content = content;
setChanged();
notifyObservers();
}
}
读者类
package com.observerpattern;
import java.util.Observable;
import java.util.Observer;
public class Reader implements Observer{
private String username;
public Reader(String username) {
this.username = username;
}
public String getUsername() {
return username;
}
@Override
public void update(Observable o, Object arg) {
System.out.println(username + "阅读了"+((Newspaper)o).getContent());
}
}
客户端
package com.observerpattern;
public class Client {
public static void main(String[] args) {
Newspaper np = new Newspaper();
Reader read1 = new Reader("张三");
Reader read2 = new Reader("李四");
np.addObserver(read1);
np.addObserver(read2);
np.setContent("威海日报,内容是。。。。。");
}
}