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

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

一、实验目的

掌握软件设计模式中的观察者模式,能够用观察者模式编写程序,解决实际问题。

二、实验内容与要求

内容:在一家拍卖行,有三个竞拍者参加竞拍,拍卖过程中,拍卖者每报出一次竞价,拍卖师都会将当前的最高标价信息通知给其他竞拍者,其他竞拍者收到通知后做出相应的反映(继续竞价或放弃竞价)。请用观察者模式编写代码模拟整个竞拍过程,程序设计语言可自由选择。
要求:需要用“文字+代码+截图”的形式对实验的主要代码和运行结果进行展示和描述。

三、实验方法

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<Observer> vector = new Vector<Observer>(); 
	  @Override
	  public void add(Observer observer) { 
	    vector.add(observer); 
	  } 
	  
	  @Override
	  public void del(Observer observer) { 
	    vector.remove(observer); 
	  } 
	  
	  @Override
	  public void notifyObservers() { 
	    Enumeration<Observer> 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. 但是,如果一个被观察者对象有很多的直接和间接的观察者的话,将所有的观察者都通知到会花费很多时间。

相关推荐
©️2020 CSDN 皮肤主题: 黑客帝国 设计师:白松林 返回首页