ImageVerifierCode 换一换
格式:DOCX , 页数:12 ,大小:144.07KB ,
资源ID:25117979      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/25117979.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(设计模式课程设计蔡勇.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

设计模式课程设计蔡勇.docx

1、设计模式课程设计蔡勇西 南 交 通 大 学课程设计报告设计模式 题目: 绘图软件的设计与实现 姓名: 王 强 学号: 2014210493 专业: 软件工程 Email: 2015年6月1. 需求分析使用JAVA语言开发绘图软件,本绘图软件应具备对直线、矩形、圆形等最基本图形的绘制功能,此外,还可以对绘制的图形进行一些操作,如选中图形、移动已经选中的图形、对已经选中的多个图形进行组合、对选中的已经组合的图形进行拆分、改变选中图形的颜色、删除已经选中的图形等。采用面向对象的思想开发本画图软件,为了可重用代码、让代码更容易被他人理解、保证代码可靠性,使用设计模式。在系统中,涉及三大类模式:创建型模

2、式、结构型模式和行为型模式。2. 系统设计2.1 设计框架 在设计java绘图软件时,主要包含了绘图界面的实现和绘图实现,两大主要任务。在实现上,对于绘图界面的实现,采用改了javafxRIA开发,将界面用Main.fxml文件定义,然后通过MainController实现界面初始化及按键方法。对于绘图的实现,采用改了继承在jfxrt包下的各种图形类及javafx.Application类。Jfxrt包下有各种图形的实现及扩展。在最后,将所编写代码,重构为带有设计模式的代码,使所做的软件具有更好的扩展性,职责明确,便于修改。2.2 部分重要UML图展示 图1 适配器对象及其接口图 图2 命令者

3、对象继承图 图3 画图对象继承图 图4 中介者对象继承图 图5 事件处理继承图图6 图形类继承图2.3 类的定义CollegueAdapter:这个类是用来适应JavaFX组件原型Cacha类。它是适配器模式的一部分。GenericAdapter:该接口描述了一个通用的适配器。一切对象都可以被代理。Command:这个command接口,为命令模式向上的命令接口。GroupCommand、ShapeCommand、UngroupCommand : 这三个类用于组图形和解组状态以及绘制图形。AbstractShapeObjectMouseEvent:这个类描述了鼠标事件。在使用的时,它必须是在形

4、状对象执行类的一个成员。CircleObjectMouseEventHandler、EllipseObjectMouseEventHandler、GroupObjectMouseEventHandler、PathObjectMouseEventHandler、PolygonObjectMouseeventHandler:这五个类都继承与 AbstractShapeObjectMouseEvent这个鼠标事件类,用于定义各自图形鼠标事件的实现。MainController:这个类实现自Initializable接口,用于初始化界面,及实现界面按钮方法。Mediator:这个接口是用来描述任何可能

5、的调解类的调解模式。Collegue:这个接口应该被用来定义在中介模式的同事接口。Cache:这个类是用来通过请求克隆原型对象。它是一个线程安全Singleton。用来得到的原型,getShape()方法使用通过给枚举类型,以指示正确的形状。它是在调解模式的中介作用。CircleObject、EllipaseObject、GroupObject、PathObject、RectangleObject、SqurareObjecct、TriangleObject:这几个类都是图形类,都继承与其上层图形类,也实现了ShapeObject接口。Main:继承自Application类,用来启动java软

6、件。3 系统实现3.1 主界面展示主界面布局的代码在main.fxml中,定义了主界面的布局,界面加载代码:public void start(final Stage primaryStage) try / Load FXML final Parent root = FXMLLoader.load(getClass().getResource(/at/fh/swp/graphicseditor/gui/Main.fxml); Scene scene = new Scene(root); scene.getStylesheets().add(/at/fh/swp/graphicseditor/g

7、ui/Main.css); primaryStage.setTitle(Graphics Editor); primaryStage.setScene(scene); primaryStage.setResizable(false); primaryStage.show(); catch (IOException e) e.printStackTrace(); 按钮的实现在MainController中,以Circle代码为例:3.2 点击绘图实现点击绘图的代码:FXML public void onCircle(ActionEvent event) int id = ShapeTypes.C

8、IRCLE_ID; Command shapeCmd = new ShapeCommand(this.editorPane, Cache.getInstance().getShape(id); History.getInstance().execute(shapeCmd); Override public void draw(Pane target, Object n) if (n instanceof Node) target.getChildren().add(Node) n); System.out.println(Draw + target.getChildren(); else th

9、row new IllegalArgumentException(); Ps: 这里用到了命令模式,主要实现了client与具体实现者的解耦,所有的命令有Invoker发出。3.3 事件处理实现事件处理的代码:(点击事件与拖拽为例)public void handle(MouseEvent event) if (event.getEventType() = MouseEvent.MOUSE_CLICKED) if (event.isShiftDown() if (Grouper.getInstance().contains(this.m_internalEventBound) Grouper.

10、getInstance().remove(ShapeObject) event.getSource(); else Grouper.getInstance().add(ShapeObject) event.getSource(); else if (event.getEventType() = MouseEvent.MOUSE_DRAGGED) / Set new layout X and Y values for polygon this.m_internalEventBound.setLayoutX(event.getSceneX() + this.m_deltaPoly.getX();

11、this.m_internalEventBound.setLayoutY(event.getSceneY() + this.m_deltaPoly.getY(); 3.4 获取图形获取图形实例代码:public static Cache getInstance() if (Cache.m_instance = null) synchronized (Cache.class) if (Cache.m_instance = null) Cache.m_instance = new Cache(); return Cache.m_instance; Ps:这里用到了单例模式。3.5 撤销与恢复操作撤

12、销与恢复操作代码:public void undo() if (!m_undos.isEmpty() Command cmd = m_undos.pop(); cmd.undo(); m_redos.push(cmd); else System.out.println(Nothing to undo.); public void redo() if (!m_redos.isEmpty() Command cmd = m_redos.pop(); cmd.redo(); m_undos.push(cmd); else System.out.println(Nothing to redo.); 4

13、 测试对画图软件进行功能测试,对于绘制基本图形的绘画,以及对于填充颜色,边框颜色没有问题。对于拖拽功能、点选,以及撤销和恢复功能的操作也没有问题。5 总结本软件的设计初衷,是为了学习设计模式,在本软件的设计中,其实用到了六种模式:单例模式,命令者模式,代理模式,原型模式,中介者模式及组合模式,用心观察才能体会到其中的作用。这使本软件具备了更好的扩展性。当然也是为了学习javafx对于RIA程序的编写。本软件还存在一些问题,例如,不能持久化等。有待后续填补。参考文献1 Bruce Eckel. Thinking in JavaM. Upper Saddle River, New Jersey, USA: Prentice Hall, 20062 Eric. Java编程思想M. 第4版.机械工业出版社,2007年6月.3 Metsker S J. Java设计模式M. 第2版. 电子工业出版社, 2012年9月.4 刘德山.Java设计模式深入研究M.人民邮电出版社,2014年7月.5 美 Erich Gamma. Design Patterns: Elements of Reusable Object-Oriented SoftwareM. 机械工业出版社,2000年9月.

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1