软件设计模式|软件设计模式之观察者模式实验
软件设计模式之观察者模式实验 一、实验目的
掌握软件设计模式中的观察者模式,能够用观察者模式编写程序,解决实际问题。
二、实验内容与要求
内容:在一家拍卖行,有三个竞拍者参加竞拍,拍卖过程中,拍卖者每报出一次竞价,拍卖师都会将当前的最高标价信息通知给其他竞拍者,其他竞拍者收到通知后做出相应的反映(继续竞价或放弃竞价)。请用观察者模式编写代码模拟整个竞拍过程,程序设计语言可自由选择。
要求:需要用“文字+代码+截图”的形式对实验的主要代码和运行结果进行展示和描述。
三、实验方法
MySubject类就是我们的主对象,ObserverR1和ObserveR2是依赖于MySubject的对象,当MySubject变化时,ObserverR1和ObserverR2必然变化。Abstract Subject类中定义着需要监控的对象列表,可以对其进行修改:增加或删除被监控对象,且当MySubject变化时,负责通知在列表内存在的对象。
- 一个Observer接口:
package com.observer.java;
public interface Observer {
public void update();
}
- 两个实现类:
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("三号竞拍者:放弃竞价");
}
}
- 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();
} }
- 测试类:
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();
}
}
四 、实验结果
-
文章图片
- 观察者模式实际上是两个操作,竞价者提出自己的价格和价格变化后通知其他竞价者们。观察者和被观察者是抽象耦合的,能够建立一套触发机制。
- 【软件设计模式|软件设计模式之观察者模式实验】但是,如果一个被观察者对象有很多的直接和间接的观察者的话,将所有的观察者都通知到会花费很多时间。
推荐阅读
- PMSJ寻平面设计师之现代(Hyundai)
- 太平之莲
- 闲杂“细雨”
- 七年之痒之后
- 深入理解Go之generate
- 由浅入深理解AOP
- 期刊|期刊 | 国内核心期刊之(北大核心)
- 生活随笔|好天气下的意外之喜
- 感恩之旅第75天
- python学习之|python学习之 实现QQ自动发送消息