观察者模式_简单例子.doc_第1页
观察者模式_简单例子.doc_第2页
观察者模式_简单例子.doc_第3页
观察者模式_简单例子.doc_第4页
观察者模式_简单例子.doc_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验五、观测者模式(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(得到信息:+mConcreteSubject.getInformation(); 主题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 mObserver; private String Information=; private Object mState; 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;imObserver.size();i+) Observer o= mObserver.get(i); o.update(); 客户端public class Application public static void main(String args) 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(+c.getspeed(); 观察者转向灯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;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(+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 ActionListener private int speed=30; private String direction=东; private String turn=; JButton jiasu; JButton jiansu; JButton zuozhuan; JButton youzhuan; public car() jiasu=new JButton(加速); jiasu.addActionListener(this); jiansu=new JButton(减速); jiansu.addActionListener(this); zuozhuan=new JButton(左转向); zuozhuan.addActionListener(this); youzhuan=new JButton(右转向); youzhuan.addActionListener(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; public 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); if(e.getSource()=jiansu) int s=0; if(speed=0) s=0; else s=(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(e.getSource()=youzhuan) 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);主框架package driver;import java.util.Observable;import java.util.Observer;import java.awt.*;import java.awt.event.*;import javax.swing.*;/* * * author 郑李斌 */public class Main extends JFrame Main() this.setLayout(null); setBounds(20, 20, 500, 300); JLabel su=new JLabel(速度km/h:); su.setBounds(20, 60, 60, 20); add(su); JLabel dir=new JLabel(方向:); dir.setBounds(20, 80, 60, 20); add(dir); car c=new car(); SpeedA s=new SpeedA(c); direction d=new direction(c); turnlight t=new turnlight(c); c.addObserver(t); c.addObserver(d); c.addObserver(s); JButton jiasu=c.getjiasu(); JButton jiansu=c.getjiansu(); JButton zuozhuan=c.getzuozhuanxiang(); JButton youzhuan=c.getyouzhuanxiang(); jiasu.setBounds(20, 20, 60, 40); jiansu.setBounds(90, 20, 60, 40); zuozhuan.setBounds(160, 20, 80, 40); youzhuan.setBounds(250, 20, 80, 40); JTextField zuozhuand=t.getText1(); zuozhuand.setBounds(20, 100, 60, 20); zuozhuand.setEditable(false); JTextField youzhuand=t.getText2(); youzhuand.setBounds(200, 100, 60, 20); youzhuand.setEditable(false); JTextField sudu=s.getText(); sudu.setBounds(80, 60, 60, 20); sudu.setEditable(false); JTextField di=d.getText(); di.setBounds(80, 80, 60, 20); di.setEditable(false); add(jiansu); add(jiasu); add(sudu); add(di); add(zuozhuan); add(youzhuan); add(zuozhuand); add(youzhuand); setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); /* * param args the command line arguments */ public static void main(String args) / TODO code application logic here new Main(); 2、 从观测者模式的角度剖析并应用java.awt.image.ImageObserver。import java.awt.*;import java.applet.*;import java.awt.image.*;public class Main extends Applet implements ImageObserverImage img;int step=0;/step 用来表述已被下载的那部分图片的高度int percent=0;/percent 用来表述已下载的图片的高度占图片总高度的百分比public void init()img=getImage(getCodeBase(),2.jpg);public void paint(Graphics g)g.drawImage(img,0,0,this);public boolean imageUpdate(Image img_ob,int flags,int x,int y,int width,int height)if(fl

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论