软件设计模式|软件设计模式之观察者模式实验

软件设计模式之观察者模式实验 一、实验目的
掌握软件设计模式中的观察者模式,能够用观察者模式编写程序,解决实际问题。
二、实验内容与要求
内容:在一家拍卖行,有三个竞拍者参加竞拍,拍卖过程中,拍卖者每报出一次竞价,拍卖师都会将当前的最高标价信息通知给其他竞拍者,其他竞拍者收到通知后做出相应的反映(继续竞价或放弃竞价)。请用观察者模式编写代码模拟整个竞拍过程,程序设计语言可自由选择。
要求:需要用“文字+代码+截图”的形式对实验的主要代码和运行结果进行展示和描述。
三、实验方法
MySubject类就是我们的主对象,ObserverR1和ObserveR2是依赖于MySubject的对象,当MySubject变化时,ObserverR1和ObserverR2必然变化。Abstract Subject类中定义着需要监控的对象列表,可以对其进行修改:增加或删除被监控对象,且当MySubject变化时,负责通知在列表内存在的对象。

  1. 一个Observer接口:
package com.observer.java; public interface Observer { public void update(); }

  1. 两个实现类:
package com.observer.java; public class ObserverR1 implements Observer { @Override public void update() { System.out.println("二号竞拍者:继续竞价"); } } class ObserverR2 implements Observer { @Override public void update() { System.out.println("三号竞拍者:放弃竞价"); } }

  1. Subject接口及实现类
package com.observer.java; import java.util.Enumeration; import java.util.Vector; public interface Subject { /*增加观察者*/ public void add(Observer observer); /*删除观察者*/ public void del(Observer observer); /*通知所有的观察者*/ public void notifyObservers(); /*自身的操作*/ public void operation(); } abstract class AbstractSubject implements Subject { private Vector vector = new Vector(); @Override public void add(Observer observer) { vector.add(observer); } @Override public void del(Observer observer) { vector.remove(observer); } @Override public void notifyObservers() { Enumeration enumo = vector.elements(); while(enumo.hasMoreElements()){ enumo.nextElement().update(); } } } class MySubject extends AbstractSubject { @Override public void operation() { System.out.println("一号竞拍者出价"); notifyObservers(); } }

  1. 测试类:
package com.observer.java; public class Client { public static void main(String[] args) { Subject sub = new MySubject(); sub.add(new ObserverR1()); sub.add(new ObserverR2()); sub.operation(); } }

四 、实验结果
  1. 软件设计模式|软件设计模式之观察者模式实验
    文章图片

  2. 观察者模式实际上是两个操作,竞价者提出自己的价格和价格变化后通知其他竞价者们。观察者和被观察者是抽象耦合的,能够建立一套触发机制。
  3. 【软件设计模式|软件设计模式之观察者模式实验】但是,如果一个被观察者对象有很多的直接和间接的观察者的话,将所有的观察者都通知到会花费很多时间。

    推荐阅读