实验 21:观察者模式
本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:
1、理解观察者模式的动机,掌握该模式的结构;
2、能够利用观察者模式解决实际问题。
[实验任务一]:股票提醒
当股票的价格上涨或下降5%时,会通知持有该股票的股民,当股民听到价格上涨的消息时会买股票,当价格下降时会大哭一场。
实验要求:
1. 画出对应类图;
2. 提交源代码;
3. 注意编程规范。
1.
2.// 观察者接口
interface Observer {
void update();
}
// 具体观察者
class Investor implements Observer {
private String name;
public Investor(String name) {
this.name = name;
}
@Override
public void update() {
System.out.println(name + " received the stock price update.");
}
}
// 主题接口
interface Subject {
void attach(Observer o);
void detach(Observer o);
void notify();
}
// 具体主题
class Stock implements Subject {
private float price;
private List<Observer> observers = new ArrayList<>();
public void attach(Observer o) {
observers.add(o);
}
public void detach(Observer o) {
observers.remove(o);
}
public void notify() {
for (Observer observer : observers) {
observer.update();
}
}
public void setPrice(float price) {
this.price = price;
// 假设价格变化超过5%则通知观察者
if (Math.abs(this.price - price) > 0.05 * this.price) {
notify();
}
}
}
public class ObserverPatternDemo {
public static void main(String[] args) {
Stock stock = new Stock();
Investor investor1 = new Investor("Investor 1");
Investor investor2 = new Investor("Investor 2");
stock.attach(investor1);
stock.attach(investor2);
stock.setPrice(100.0f); // 初始价格
stock.setPrice(105.0f); // 价格上涨5%,通知观察者
stock.setPrice(95.0f); // 价格下降5%,通知观察者
}
}