11.22
软件设计 石家庄铁道大学信息学院
实验 21:观察者模式
本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:
1、理解观察者模式的动机,掌握该模式的结构;
2、能够利用观察者模式解决实际问题。
[实验任务一]:股票提醒
当股票的价格上涨或下降5%时,会通知持有该股票的股民,当股民听到价格上涨的消息时会买股票,当价格下降时会大哭一场。
实验要求:
1. 类图;
2. 源代码;
①、MySubject.java
package org.example.shiyanershiyi;
import java.util.ArrayList;
public abstract class MySubject {
protected ArrayList<MyObserver> observers = new ArrayList<MyObserver>();
//注册方法
public void attach(MyObserver observer) {
observers.add(observer);
}
//注销方法
public void detach(MyObserver observer) {
observers.remove(observer);
}
//抽象通知方法
public abstract void change(int rate);
}
②、MyObserver.java
package org.example.shiyanershiyi;
public interface MyObserver {
void response(int rate);
}
③、Holder.java
package org.example.shiyanershiyi;
public class Holders implements MyObserver {
public void response(int rate) {
if (rate >= 5) {
System.out.println("股票上涨,买买买");
} else if (rate <= -5) {
System.out.println("股票下跌,大哭一场");
} else {
System.out.println("股票比较稳定,还好还好");
}
}
}
④、Stock.java
package org.example.shiyanershiyi;
public class Stock extends MySubject {
public void change(int rate) {
for (Object obs : observers) {
((MyObserver) obs).response(rate);
}
}
}
⑤、Client.java
package org.example.shiyanershiyi;
public class Client {
public static void main(String args[]) {
MySubject subject = new Stock();
MyObserver obs1;
obs1=new Holders();
subject.attach(obs1);
System.out.println("****股票上涨****");
subject.change(5);
System.out.println("");
System.out.println("****股票下跌****");
subject.change(-5);
System.out.println("");
System.out.println("****股票稳定****");
subject.change(4);
System.out.println("");
}
}
3. 运行结果。