


下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验二 策略模式、观察者模式和组合模式一、实验目的: (1)学习和掌握策略模式;(2)学习和掌握观察者模式;(3)学习和掌握组合模式;(4)学习和掌握使用这些模式解决实际问题;二、实验内容1. 请使用策略模式实现下列编程要求:已知几何形状家族有圆形、矩形、椭圆 形、三角形等形状。 请用 Java 语言定义一个抽象类 MyShape 表示形状这样概念,MyShape 抽象类中提供了计算面积、 周长、显示形状信息的抽象方法, 然后分别 定义它的子类 MyCircle (圆形)、 MyRectangle(矩形)、 MyEllipse (椭圆形)、 MyTriangle(三角形) 等特定几何形状。 并
2、绘制这些定义的几何家族的所有形状。2请用观察者模式实现功能:学校发布信息,学生可以订阅,老师可以订阅, 行政人员也可以订阅。提示:定义主题接口,观察者接口,定义 Notice 、学生、 老师和行政人员类,定义测试类。其中 Notice 类实现主题接口,老师、学生和 行政人员实现观察者接口。 思考,如果要求实现学生和老师均可以订阅多个信息, 即除了订阅学校发布信息,也可以订阅所属系发送的信息,请编程实现。3定义一个游戏地图。地图是由每个方块拼合起来。地图上有墙等障碍物,也 有可以通行的基本图元构成。 请使用组合模式, 绘制一个游戏地图, 地图的内容 自行定义,也可以类似图 3 形式:图 3 游戏
3、地图4已知有一个二维数组数据如图 1 所示,请结合策略模式、观察者模式和组合 模式实现一个 MVC 结构的应用程序。要求:如果用户移动滑块,可以修改二维 数组的值, 并在运行的用户界面中显示出来。 其中,饼状图和柱状图中的区域分 布为二位数组每一维的总和。运行结果如图 4和图 5所示。605090904030102070图4 数据模型图 5 运行结果三、实验环境1、PC微机;2、DOS操作系统或 Windows 操作系统;3、jdk 程序集成环境 Eclipse四、源代码、测试结果及 UML 图一: 1.UML 图DrawShape -shapes:List +DrawShape() +add
4、Shape(shape:MyShap e):void +paintComponent(g:Gr aphics):voidMyShape+area():float +perimeter():float +draw(g:Graphics): voidMyCircle -PI:float=3.14f -radius:int -x:int -y:int +MyCircle(x:int,y: int,radius:int) +area():float +perimeter():float +draw(g:Graphics) :void +toString():StringMyRectangleMyEll
5、ipse-width:int-PI:float=3.14f-height:int-aLong:int-x:int-bShort:int-y:int-x:int-y:int+MyRectangle(widt+MyEllipse(aLong:inh:int,height:int,x:int,t,bShort:int,x:int,y:inty:int)+area():float+area():float+perimeter():float+perimeter():float+draw(g:Graphics):+draw(g:Graphics):vvoidoid+toString():String+t
6、oString():StringMyTriangle -xPoints:int -yPoints:int -a:int -b:int -c:int -n:int +MyTriangle(xPoin ts:int,yPoints:int, a:int,b:int,c:int,n:int ) +area():float +perimeter():float +draw(g:Graphics): void +toString():String2. 源程序代码:package course.strategy.shape;import java.awt.Graphics;import java.util
7、.ArrayList;import java.util.List;import javax.swing.JPanel;/绘制所有图形SuppressWarnings(serial) public class DrawShape extends JPanel private List shapes;public DrawShape() shapes=new ArrayList();public void addShape(MyShape shape)/添加图形if(shape!=null) shapes.add(shape);public void paintComponent(Graphics
8、 g)/依次绘制图形for(MyShape ms:shapes)ms.draw(g);System.out.println(ms);package course.strategy.shape;import java.awt.Graphics;/形状家族public abstract class MyShape public abstract float area();public abstract float perimeter();public abstract void draw(Graphics g); package course.strategy.shape;import java.
9、awt.Color;import java.awt.Graphics;/圆形public class MyCircle extends MyShape private static final float PI=3.14f; private int radius;/定义圆形半径private int x,y;/定义起点( x,y )坐标public MyCircle(int x,int y,int radius)/构造函数super(); this.x=x; this.y=y;this.radius = radius;Overridepublic String toString() retur
10、n MyCircle radius= + radius + , x 坐标 = + x + , y 坐标 = + y + + 面积 =+area()+, 周长 =+perimeter();Overridepublic void draw(Graphics g) / 绘制图形/ TODO 自动生成的方法存根 g.setColor(Color.blue); g.fillOval(x, y, 2*radius, 2*radius);、package course.strategy.shape;import java.awt.Color;import java.awt.Graphics;/矩形publi
11、c class MyRectangle extends MyShape private int x,y;/定义起点( x,y )坐标private int width,height;/ 定义矩形的宽和高public MyRectangle(int x,int y,int width, int height) super();this.x=x;this.y=y;this.width = width;this.height = height;Overridepublic float perimeter() / TODO 自动生成的方法存根return 2*(width+height);Overri
12、depublic String toString() return MyRectangle x 坐标 = + x + , y 坐标 = + y + , 矩形宽 = + width+ , 矩形高 = + height + + 面积 =+area()+, 周长 =+perimeter();Overridepublic void draw(Graphics g) / TODO 自动生成的方法存根 g.setColor(Color.green); g.fillRect(x, y, width, height);、package course.strategy.shape;import java.awt
13、.Color;import java.awt.Graphics;/椭圆形public class MyEllipse extends MyShape private static final float PI=3.14f;private int x,y;/定义起点( x,y )坐标private int aLong,bShort; / 定义椭圆的长轴和短轴public MyEllipse(int x, int y,int aLong, int bShort) super();this.x = x;this.y = y;this.aLong = aLong;this.bShort = bShor
14、t;Override public String toString() return MyEllipse x 坐标 = + x + , y 坐标 = + y + , 长轴 = + aLong+ , 短轴 = + bShort + +面积 =+area()+, 周长 =+perimeter();Overridepublic void draw(Graphics g) / TODO 自动生成的方法存根 g.setColor(Color.red); g.fillOval(x, y, aLong, bShort);、package course.strategy.shape;import java.a
15、wt.Color;import java.awt.Graphics;/三角形public class MyTriangle extends MyShape private int a,b,c,n;private int xPoints;private int yPoints;public MyTriangle( int xPoints, int yPoints,int n,int a,int b,int c) super();this.xPoints = xPoints;this.yPoints = yPoints;this.n = n; this.a=a; this.b=b; this.c=
16、c;Overridepublic String toString() return MyTriangle a= + a + , b= + b + , c= + c + + 面积 =+area()+, 周长 =+perimeter(); Override public void draw(Graphics g) / TODO 自动生成的方法存根 g.setColor(Color.yellow); g.fillPolygon(xPoints, yPoints, n);package course.strategy.shape;import javax.swing.JFrame;/测试绘制所有形状/
17、测试程序public class Test * param args*/public static void main(String args) / TODO 自动生成的方法存根 JFrame frame=new JFrame();DrawShape ds=new DrawShape();ds.addShape(new MyCircle(20,20,60);ds.addShape(new MyRectangle(200,20,120,100);ds.addShape(new MyEllipse(40,200,150,100);int xPoints=300,240,370;int yPoint
18、s=200,280,300;ds.addShape(new MyTriangle(xPoints,yPoints,3,9,12,15);frame.getContentPane().add(ds);frame.setTitle( 绘制图形演示 );frame.setSize(500,400);frame.setVisible( true ); frame.setDefaultCloseOperation(JFrame. EXIT_ON_CLOSE ); 3. 测试结果图: 1.UML 图:SubjectObserver+registerObserver(ob server:Observer):
19、void +removeObserver(ob server:Observer):void +notifyAllObservers( ):void+getNotice(message:String):voidDepartmentNoticeNotice-observers:List-message:String-observers:List-message:String+DepartmentNotice() +registerObserver(obser ver:Observer):void +removeObserver(obser ver:Observer):void +notifyAll
20、Observers():v oid+setMessage (str:String):void +getMessage():String+Notice() +registerObserver(obser ver:Observer):void +removeObserver(obser ver:Observer):void +notifyAllObservers():v oid+setMessage (str:String):void +getMessage():StringTeacherStudent+getNotice(mess age:String):void+getNotice(mess
21、age:String):void+getNotice(mess age:String):voidAdministrator2.源代码:package course.observer.notice;/主题public interface Subject public void registerObserver(Observer observer); public void removeObserver(Observer observer); public void notifyAllObservers();package course.observer.notice;import java.ut
22、il.ArrayList;import java.util.Iterator;import java.util.List;/学校通知public class Notice implements Subject private List observers;private String message;public Notice()observers=new ArrayList();Overridepublic void removeObserver(Observer observer) / TODO 自动生成的方法存根if(observers.contains(observer) observ
23、ers.remove(observer);Overridepublic void notifyAllObservers() / TODO 自动生成的方法存根for(Iterator it=observers.iterator();it.hasNext();)Observer o=it.next();o.getNotice(getMessage();public void setMessage(String str)this.message=str;public String getMessage()return message;、package course.observer.notice;i
24、mport java.util.ArrayList;import java.util.Iterator;import java.util.List;/学院通知public class DepartmentNotice implements Subject private List observers;private String message;public DepartmentNotice()observers=new ArrayList();Overridepublic void registerObserver(Observer observer) / TODO 自动生成的方法存根obs
25、ervers.add(observer);Overridepublic void removeObserver(Observer observer) / TODO 自动生成的方法存根 observers.remove(observer);Overridepublic void notifyAllObservers() / TODO 自动生成的方法存根for(Iterator it=observers.iterator();it.hasNext();) Observer o=it.next();o.getNotice(getMessage();public void setMessage(Str
26、ing str)this.message=str;public String getMessage()return message;package course.observer.notice;/观察者public interface Observer public void getNotice(String message); package course.observer.notice; /具体观察者,教师 public class Teacher implements Observer Overridepublic void getNotice(String message) / TOD
27、O 自动生成的方法存根 System.out.println( 教师收到通知: +message);package course.observer.notice; /具体观察者,学生 public class Student implements Observer Overridepublic void getNotice(String message) / TODO 自动生成的方法存根System.out.println( 学生收到通知: +message);package course.observer.notice; /具体观察者,行政人员 public class Administra
28、tor implements Observer Overridepublic void getNotice(String message) / TODO 自动生成的方法存根System.out.println( 行政人员收到通知: +message); package course.observer.notice;/测试程序public class Test * param args*/public static void main(String args) / TODO 自动生成的方法存根Notice notice= new Notice();DepartmentNotice depart=
29、 new DepartmentNotice();Observer tea,stu,admin;tea=new Teacher();stu=new Student(); admin=new Administrator();notice.registerObserver(tea); notice.registerObserver(stu);notice.registerObserver(admin);depart.registerObserver(tea); depart.registerObserver(stu);notice.setMessage(学校通知:五一全体放假七天。 。 ); dep
30、art.setMessage(学院通知: 这个礼拜周末补课, 请各位做好心里准备。 。); notice.notifyAllObservers();System.out.println();depart.notifyAllObservers();System.out.println();notice.removeObserver(tea);notice.notifyAllObservers();3.测试结果图: 1.UML 图2.源代码package posite.gameMap;import java.awt.Dimension;import java.awt.Graphics;import
31、 javax.swing.JPanel;SuppressWarnings(serial)public abstract class GameComponent extends JPanel public abstract void paintComponent(Graphics g); public Dimension getPreferredSize() return new Dimension(50,50);package posite.gameMap;import java.awt.Graphics;import java.awt.Image;import javax.swing.Bor
32、derFactory;import javax.swing.ImageIcon;SuppressWarnings(serial)public class Grass extends GameComponent private ImageIcon icon;private Image image;public Grass() setBorder(BorderFactory.createEmptyBorder(); icon=new ImageIcon(src/images/grass.jpg); image=icon.getImage();Overridepublic void paintCom
33、ponent(Graphics g) / TODO 自动生成的方法存根g.drawImage(image,0,0,getWidth(),getHeight(),this); package posite.gameMap;import java.awt.Graphics;import java.awt.Image;import javax.swing.ImageIcon;SuppressWarnings(serial)public class House extends GameComponent private ImageIcon icon;private Image image; publi
34、c House()icon=new ImageIcon(src/images/house.jpg); image=icon.getImage(); Override public void paintComponent(Graphics g) / TODO 自动生成的方法存根g.drawImage(image,0,0,getWidth(),getHeight(),this); package posite.gameMap;import java.awt.Graphics;import java.awt.Image;import javax.swing.ImageIcon;SuppressWar
35、nings(serial )public class Tree extends GameComponent private ImageIcon icon;private Image image;public Tree()icon=new ImageIcon( src/images/tree.jpg ); image=icon.getImage();Overridepublic void paintComponent(Graphics g) / TODO 自动生成的方法存根g.drawImage(image,0,0,getWidth(),getHeight(), this ); package
36、posite.gameMap;import java.awt.Graphics;import java.awt.Image;import java.io.File;import javax.imageio.ImageIO;import javax.swing.ImageIcon;SuppressWarnings(serial)public class Wall extends GameComponentprivate ImageIcon icon;private Image image;public Wall()icon=new ImageIcon(src/images/wall.jpg);i
37、mage=icon.getImage();Override public void paintComponent(Graphics g) / TODO 自动生成的方法存根 tryimage=ImageIO.read(new File(src/images/wall.jpg); g.drawImage(image,0,0,getWidth(),getHeight(),this);catch(Exception e) e.printStackTrace();package posite.gameMap;import java.awt.Graphics;import java.awt.Image;i
38、mport javax.swing.ImageIcon;SuppressWarnings(serial) public class Road extends GameComponent private ImageIcon icon;private Image image;public Road()icon=new ImageIcon(src/images/road.jpg); image=icon.getImage();Overridepublic void paintComponent(Graphics g) / TODO 自动生成的方法存根 g.drawImage(image,0,0,ge
39、tWidth(),getHeight(),this);package posite.gameMap;import java.awt.Color;import java.awt.Container;import java.awt.GridLayout;import javax.swing.JFrame;/测试程序SuppressWarnings(serial)public class Test extends JFrame private GridLayout layout;private int map=1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,0,0,2,0,0,0
40、,0,0,2,0,0,3,1,1,3,0,0,0,1,1,3,1,1,0,0,0,3,1,1,0,0,4,0,0,0,0,0,0,0,4,0,0,1,1,0,1,0,1,1,1,0,1,1,1,0,1,0,1,1,0,1,0,0,3,0,0,0,3,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,4,0,0,1,3,1,0,0,4,0,0,1,1,0,0,0,1,1,1,3,1,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,3,3
41、,3,0,0,1,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,1,0,1,1,2,0,0,0,4,3,4,3,4,0,0,0,2,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1;public Test()super( 游戏地图演示 );Container container=getContentPane();layout=new GridLayout(15,15);container.setLayout(layout);/设置 15 行 *15 列的网格布局Color c=new Color(60,90,0); container.setBackground(
42、c);/ 设置窗口背景颜色for(int i=0;ilayout.getRows();i+)for(int j=0;jlayout.getColumns();j+) switch(mapij) case 0:container.add(new Road();break; case 1:container.add(new Wall();break; case 2:container.add(new House();break; case 3:container.add(new Grass();break; case 4:container.add(new Tree();break;setSize
43、(600,600); setVisible(true);/* param args*/public static void main(String args) / TODO 自动生成的方法存根Test t=new Test(); t.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);3.测试结果图SuMi-函脚們冊刪I訓刚|嘲卅删制側曲刪l;F刚渤即0 一IB II! !S!:Model+setData(index:int,value:int):void+getData():int+addObserver(o:View):voi d+removeOb
44、server(o:View) :void+notifyObservers():voidView+addView(v:View)void+removeView(v:View) void +update(data:int):voidDataModel -data:int -observers: List +DataModel() +setData(index:int,value:i nt):void +getData():int +addObserver(o:View):v oid +removeObserver(o:Vie w):void +notifyObservers():voidTable
45、ViewPieViewHistogramView-data:int-startX:int=20-startY:int=20-data:int-data:int-WIDTH:int=30+addView(v:View) void+removeView(v:Vi ew)void +update(data:int): void +paintComponent( g:Graphics):void+addView(v:View) void+removeView(v:Vi ew)void +update(data:int): void +paintComponent( g:Graphics):void+a
46、ddView(v:View )void +removeView(v:V iew)void +update(data:int) :void +paintComponent( g:Graphics):voidFrameView -data:int -views: List +FrameView() +addView(v:View) void +removeView(v:Vi ew)void +update(data:int): voidFrameController -FPS_MIN:int=0 -FPS_MAX:int=100 -FPS_INIT:int=50 -sliders:JSlider
47、-model:Model +FrameController(m: Model)2.源代码 package course.MVC; public interface Model public void setData(int index, int value); public int getData();public void addObserver(View o);public void removeObserver(View o); public void notifyObservers();for(int i=0;idata.length;i+) datai=5;Overridepubli
48、c void setData(int index, int value) / TODO 自动生成的方法存根 this.dataindex=value; notifyObservers();Overridepublic void addObserver(View o) / TODO 自动生成的方法存根if (o = null)throw new NullPointerException();if (!observers.contains(o)observers.add(o);Overridepublic void removeObserver(View o) / TODO 自动生成的方法存根 i
49、f(observers.contains(o) observers.remove(o);Overridepublic void notifyObservers() / TODO 自动生成的方法存根for(Iterator it=observers.iterator();it.hasNext();) View observer=it.next(); observer.update(this.data);Overridepublic int getData() / TODO 自动生成的方法存根 return data;package course.MVC; public interface Vie
50、w public abstract void addView(View v);/添加视图public abstract void removeView(View v);/删除视图public abstract void update(int data); / 更新视图、package course.MVC;import java.awt.Color;import java.awt.Graphics;import javax.swing.JPanel;/表格图SuppressWarnings(serial)public class TableView extends JPanel impleme
51、nts View private int data=60,50,90,90,40,30,10,20,70;private static final int startX=20;private static final int startY=20;public void paintComponent(Graphics g) super.paintComponent(g); for(int i=0;i3;i+) for(int j=0;j3;j+) g.setColor(Color.black); g.drawRect(startX+50*j,startY+50*i,50,50); g.drawString( +datai*3+j, 45+50*j, 45+50*i);Overridepublic void addView(View v) / TODO 自动生成的方法存根System.out.println( 不允许添加视图! );Overridepublic void removeView(Vi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 矿山开采对水资源利用与保护考核试卷
- 通信设备零售企业社会责任实践考核试卷
- 运动防护用具的校园体育安全考核试卷
- 行政决策中公众意见收集与分析方法试题及答案
- 网络设备选型与配置试题及答案
- 软件开发敏捷实践考核试卷
- 政组织理论经典案例分析试题及答案
- 海洋油气开发工程建筑可持续发展战略考核试卷
- 嵌入式系统技术更新试题及答案
- 嵌入式编程语言的选择与比较试题及答案
- 供电公司新闻宣传工作培训
- 大学美育知到智慧树章节测试课后答案2024年秋德州学院
- DB37T-九小场所消防安全管理要求
- 企业食品安全知识培训课件
- 【MOOC】中国近现代史纲要-浙江大学 中国大学慕课MOOC答案
- 【MOOC】兽医外科手术学-华中农业大学 中国大学慕课MOOC答案
- 数控机床装调维修工(技师)职业技能鉴定理论考试题库(含答案)
- 金蝶云星空应用开发初级认证
- 2021年中等职业学校学生学业水平考试考务工作细则(考务手册)
- 《食品添加剂》课件
- 磁悬浮发动机研发进展
评论
0/150
提交评论