观察者模式
实验 21:观察者模式
本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:
1、理解观察者模式的动机,掌握该模式的结构;
2、能够利用观察者模式解决实际问题。
[实验任务]:股票提醒
当股票的价格上涨或下降5%时,会通知持有该股票的股民,当股民听到价格上涨的消息时会买股票,当价格下降时会大哭一场。
类图
源代码
/** * 抽象观察者类 */ public interface Observer { void buy(); void cry(); } import java.util.ArrayList; /** * 抽象目标类 */ public abstract class Subject { protected ArrayList observers = new ArrayList(); //添加观察者 public abstract void attach(Observer observer); //删除观察者 public abstract void detach(Observer observer); //股票价格下降 public abstract void down(); //股票价格上升 public abstract void up(); } /** * 具体观察者类 股民 */ public class Investor implements Observer { @Override public void buy() { System.out.println("股票价格上涨5%,股民买股票"); } @Override public void cry() { System.out.println("股票价格下降5%,股民大哭一场"); } } /** * 具体目标类 股票 */ public class Stock extends Subject { @Override public void attach(Observer observer) { observers.add(observer); } @Override public void detach(Observer observer) { observers.remove(observer); } /** * 股票价格上涨 */ @Override public void up() { for (Object obj : observers) { ((Observer) obj).buy(); } } /** * 股票价格下跌 */ @Override public void down() { for (Object obs : observers) { ((Observer) obs).cry(); } } } /** * 测试类 * @author mendianyu */ public class Client { public static void main(String[] args) { Observer investor1, investor2; investor1 = new Investor(); investor2 = new Investor(); Subject stock = new Stock(); stock.attach(investor1); stock.attach(investor2); stock.up(); stock.down(); } }