《观察者模式_简单例子》由会员分享,可在线阅读,更多相关《观察者模式_简单例子(11页珍藏版)》请在金锄头文库上搜索。
1、1实验五、观测者模式(4 学时)【实验目的】1、了解观测者模式的应用场景、目的和解决问题的方法。2、掌握观测者模式的结构、各角色之间的协作过程和代码实现。3、了解观测者模式的应用。【实验性质】验证性实验【实验内容与步骤】1、 用 Java 或 C#语言实现观测者模式的结构,并用代码说明客户端程序如何应用观测者模式。观察者public interface Observer public void update ();具体观察者public class ConcreteObserver implements Observer private Subject mConcreteSubject;pub
2、lic ConcreteObserver(Subject mConcreteSubject)this.mConcreteSubject = mConcreteSubject ;public void update () System.out.println(得到信息:+mConcreteSubject.getInformation();主题public interface Subject public void attach (Observer o);public void detach (Observer o);public String getInformation();public vo
3、id notifyObservers ();public String setInformation(String s);具体主题import java.util.ArrayList; public class ConcreteSubject implements Subject public ArrayList mObserver;private String Information=;private Object mState;2public ConcreteSubject()mObserver=new ArrayList();public Object getState () retur
4、n 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;
5、public void notifyObservers () for(int i=0;imObserver.size();i+)Observer o= mObserver.get(i);o.update();客户端public class Application public static void main(String args) 3Subject s=new ConcreteSubject();Observer o1=new ConcreteObserver(s);Observer o2=new ConcreteObserver(s);s.attach(o2);s.attach(o1);
6、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 ObserverJTextField text=new JTextF
7、ield();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(+c.getspeed();4观察者转向灯packa
8、ge 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 ObserverJTextField text1=new JTextField();JTextField text2=new JTextField();Observabl
9、e 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)
10、;text2.setBackground(Color.BLACK);if(s=右转)text1.setBackground(Color.BLACK);text2.setBackground(Color.red);观察者方向package driver;import java.util.Observable;import java.util.Observer;5import java.util.Observable;import java.util.Observer;import java.awt.*;import java.awt.event.*;import javax.swing.*;pu
11、blic class direction implements ObserverJTextField 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.getdirect
12、ion();text.setText(+c.getdirection();被观察者 carpackage 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 ActionListenerprivate int speed=30;private String direction=东;private String
13、 turn=;JButton jiasu;JButton jiansu;JButton zuozhuan;JButton youzhuan;public car()jiasu=new JButton(加速);6jiasu.addActionListener(this);jiansu=new JButton(减速);jiansu.addActionListener(this);zuozhuan=new JButton(左转向);zuozhuan.addActionListener(this);youzhuan=new JButton(右转向);youzhuan.addActionListener
14、(this);public JButton getjiasu()return jiasu;public JButton getjiansu()return jiansu;public JButton getzuozhuanxiang()return zuozhuan;public JButton getyouzhuanxiang()return youzhuan;public int getspeed()return speed;public String getdirection()return direction;public String getturn()return turn;pub
15、lic void change(int speed,String direction,String turn)this.speed=speed;this.direction=direction;this.turn=turn;this.setChanged();this.notifyObservers();public void actionPerformed(ActionEvent e) if(e.getSource()=jiasu)int s=speed+10;String d=direction;String t=turn;change(s,d,t);7if(e.getSource()=jiansu)int s=0;if(speed=0)s=0;elses=(speed-10);String d=direction;String t=turn;change(s,d,t);if(e.getSource()=zuozhuan)int s=speed;String d=direction;String t=左转;if(direction=东)change(s,北,t);else if(direction=西)change(s,南,t);else if(direction=南)change(s,东,t);else if(direction=北)change(s,西,t);if(