77范文网 - 专业文章范例文档资料分享平台

观察者模式_简单例子(2)

来源:网络收集 时间:2018-11-30 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

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)在线全文阅读。

观察者模式_简单例子(2).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/324318.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: