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);
6
}
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,\北\
else if(direction==\西\ change(s,\南\
else if(direction==\南\ change(s,\东\
else if(direction==\北\ change(s,\西\ }
if(e.getSource()==youzhuan){
int s=speed;
String d=direction; String t=\右转\ if(direction==\东\ change(s,\南\
else if(direction==\西\ change(s,\北\
else if(direction==\南\ change(s,\西\
else if(direction==\北\ change(s,\东\} } }
7
主框架
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();
8
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 ImageObserver{
Image img;
int step=0;//step 用来表述已被下载的那部分图片的高度
int percent=0;//percent 用来表述已下载的图片的高度占图片总高度的百分比
public void init()
9
{
img=getImage(getCodeBase(),\ }
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(((flags & SOMEBITS)!=0) & (img_ob==img))//判断是否又有新的图像数据都被下载 {
step=step+height;//计算已被下载的图片的高度
percent=step*100/img.getHeight(this);//计算这个高度占图片高度的的百分比
showStatus(percent+\在状态栏显示
repaint(x,y,width,height);//重绘屏幕.但只画新数据表达的部分.简单使用repaint()重绘
//整个屏幕会使画面闪烁 }
if((flags & ERROR)!=0)//假如下载出错
showStatus(\
if((flags & ALLBITS)!=0)//假如全部图片数据都已下载完
showStatus(\
return true; }
10
}
【实验作业】
1、试用UML图表示观测者模式的结构,并指明观测者模式的角色、各角色的功能及其协作关系,并谈谈你对观测者模式的理解。
2、查阅资料,以例说明Java或C#对观测者模式的支持(如java.util.Observable) Java的util包中的Observable实现了被观察者的功能,即主题(subject),
这个类定义了许多主题(被观察者)所需要的基本操作,如addObserver(Observer o),deleteObserver(Observer o),notifyObservers(),notifyObservers(Object arg),setChanged(),
Util包中的Observer接口则包括了观察者最基本的操作void update(Observable o, Object arg), 3、行为型模式有何特点? 行为型模式设计怎样合理的进行对象之间的通信,合理的为对象分配职责,让设计富有弹性,易维护,易复用
11
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库观察者模式_简单例子(2)在线全文阅读。
相关推荐: