实验五、观测者模式(4学时)
【实验目的】
1、了解观测者模式的应用场景、目的和解决问题的方法。
2、掌握观测者模式的结构、各角色之间的协作过程和代码实现。 3、了解观测者模式的应用。
【实验性质】
验证性实验
【实验内容与步骤】
1、 用Java或C#语言实现观测者模式的结构,并用代码说明客户端程序如何应用观测者模式。 观察者
public interface Observer { public void update ();
}
具体观察者
public class ConcreteObserver implements Observer {
private Subject mConcreteSubject;
public ConcreteObserver(Subject mConcreteSubject){
this.mConcreteSubject = mConcreteSubject ; }
public void update () {
System.out.println(\得到信息:\ }
} 主题
public interface Subject {
public void attach (Observer o); public void detach (Observer o); public String getInformation();
public void notifyObservers ();
public String setInformation(String s);
}
具体主题
import java.util.ArrayList;
public class ConcreteSubject implements Subject {
public ArrayList
private Object mState;
1
public ConcreteSubject(){
mObserver=new ArrayList
public Object getState () { return mState; }
public void setState (Object val) { mState=val; }
public void attach (Observer o) { if(o!=null)
mObserver.add(o); }
public void detach (Observer o) { if(mObserver.contains(o)) mObserver.remove(o);
}
public String setInformation(String s){ Information=s; return s; }
public String getInformation(){ return Information; }
public void notifyObservers () {
for(int i=0;i 客户端 public class Application { public static void main(String[] args) { 2 Subject s=new ConcreteSubject(); Observer o1=new ConcreteObserver(s); Observer o2=new ConcreteObserver(s); s.attach(o2); s.attach(o1); s.setInformation(\你好\ s.notifyObservers(); } } 2、请用观测者模式实现一个汽车驾驶室仪表系统,当汽车改变速度、改变方向时实时显示汽车的速度、方向、指示灯等信息。 观察者速度表 package driver; import java.util.Observable; import java.util.Observer; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class SpeedA implements Observer{ JTextField text=new JTextField(\ Observable o; int speed=0; public SpeedA(Observable o) { text.setVisible(true); this.o = o; o.addObserver(this); } public JTextField getText(){ return text; } public void update(Observable o, Object arg) { if(o instanceof car){ car c=new car(); c=(car)o; speed=c.getspeed(); text.setText(\ } } } 3 观察者转向灯 package driver; import java.util.Observable; import java.util.Observer; import java.util.Observable; import java.util.Observer; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class turnlight implements Observer{ JTextField text1=new JTextField(\ JTextField text2=new JTextField(\ Observable o; String s=\ public turnlight(Observable o) { this.o = o; o.addObserver(this); } public JTextField getText1(){ return text1; } public JTextField getText2(){ return text2; } public void update(Observable o, Object arg) { if(o instanceof car){ car c=new car(); c=(car)o; s=c.getturn(); if(s==\左转\ text1.setBackground(Color.red); text2.setBackground(Color.BLACK); } if(s==\右转\ text1.setBackground(Color.BLACK); text2.setBackground(Color.red); } } } } 观察者方向 package driver; import java.util.Observable; import java.util.Observer; 4 import java.util.Observable; import java.util.Observer; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class direction implements Observer{ JTextField text=new JTextField(\ Observable o; String s=\ public direction(Observable o) { this.o = o; o.addObserver(this); } public JTextField getText(){ return text; } public void update(Observable o, Object arg) { if(o instanceof car){ car c=new car(); c=(car)o; s=c.getdirection(); text.setText(\ } } } 被观察者car package driver; import java.util.Observable; import java.util.Observer; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class car extends Observable implements ActionListener{ private int speed=30; private String direction=\东\ private String turn=\ JButton jiasu; JButton jiansu; JButton zuozhuan; JButton youzhuan; public car(){ jiasu=new JButton(\加速\ 5 百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库观察者模式_简单例子在线全文阅读。
相关推荐: