2024.11.29
设计模式实验二十一
软件设计 石家庄铁道大学信息学院
实验 21:观察者模式
本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:
1、理解观察者模式的动机,掌握该模式的结构;
2、能够利用观察者模式解决实际问题。
[实验任务一]:股票提醒
当股票的价格上涨或下降5%时,会通知持有该股票的股民,当股民听到价格上涨的消息时会买股票,当价格下降时会大哭一场。
实验要求:
1. 画出对应类图;
2. 提交源代码;
// Observer.java(接口层)
public interface Observer {
void moneyUp(); // 当股票价格上涨时触发
void moneyDown(); // 当股票价格下跌时触发
}
//Investor.java
public class Investor implements Observer {
private String name;
public Investor(String name) {
this.name = name;
}
@Override
public void moneyUp() {
System.out.println(name + " 购买更多股票!");
}
@Override
public void moneyDown() {
System.out.println(name + " 痛哭一场!");
}
}
//Subject.java
import java.util.ArrayList;
public class Subject {
private ArrayList<Observer> obs = new ArrayList<>();
// 添加观察者
public void add(Observer observer) {
obs.add(observer);
}
// 移除观察者
public void remove(Observer observer) {
obs.remove(observer);
}
// 通知所有观察者股票价格下跌
public void down() {
System.out.println("股票价格下跌!");
for (Observer observer : obs) {
observer.moneyDown();
}
}
// 通知所有观察者股票价格上涨
public void up() {
System.out.println("股票价格上涨!");
for (Observer observer : obs) {
observer.moneyUp();
}
}
}
//Stock.java
public class Stock extends Subject {
// 当股票价格下降时触发
public void down() {
super.down();
}
// 当股票价格上涨时触发
public void up() {
super.up();
}
}
//Main.java
public class Main {
public static void main(String[] args) {
// 创建股票对象
Stock stock = new Stock();
// 创建股民(观察者)
Investor investor1 = new Investor("张三");
Investor investor2 = new Investor("李四");
Investor investor3 = new Investor("王五");
// 将股民注册为观察者
stock.add(investor1);
stock.add(investor2);
stock.add(investor3);
// 股票价格下跌
stock.down();
System.out.println();
// 股票价格上涨
stock.up();
}
}
3. 注意编程规范。