设计模式课程设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
西南交通大学
课程设计报告
设计模式
题目:绘图软件的设计与实现
姓名:王强
学号: 2014210493
专业:软件工程Email:
2015年6月
目录
设计模式 (1)
目录 (3)
1. 需求分析 (1)
2. 系统设计 (1)
2.1 设计框架 (1)
2.2 部分重要UML图展示 (1)
2.3 类的定义 (4)
3 系统实现 (5)
3.1 主界面展示 (5)
3.2 点击绘图 (7)
3.3 事件处理 (8)
3.4 获取图形 (9)
3.5 撤销与恢复操作 (10)
4 测试 (11)
5 总结 (11)
1.需求分析
使用JAVA语言开发绘图软件,本绘图软件应具备对直线、矩形、圆形等最基本图形的绘制功能,此外,还可以对绘制的图形进行一些操作,如选中图形、移动已经选中的图形、对已经选中的多个图形进行组合、对选中的已经组合的图形进行拆分、改变选中图形的颜色、删除已经选中的图形等。采用面向对象的思想开发本画图软件,为了可重用代码、让代码更容易被他人理解、保证代码可靠性,使用设计模式。在系统中,涉及三大类模式:创建型模式、结构型模式和行为型模式。
2.系统设计
2.1 设计框架
在设计java绘图软件时,主要包含了绘图界面的实现和绘图实现,两大主要任务。在实现上,对于绘图界面的实现,采用改了javafxRIA开发,将界面用Main.fxml文件定义,然后通过MainController实现界面初始化及按键方法。对于绘图的实现,采用改了继承在jfxrt包下的各种图形类及javafx.Application类。Jfxrt 包下有各种图形的实现及扩展。在最后,将所编写代码,重构为带有设计模式的代码,使所做的软件具有更好的扩展性,职责明确,便于修改。
2.2 部分重要UML图展示
图1 适配器对象及其接口图
图2 命令者对象继承图
图3 画图对象继承图图4 中介者对象继承图
图5 事件处理继承图
图6 图形类继承图
2.3 类的定义
CollegueAdapter:这个类是用来适应JavaFX组件原型Cacha类。它是适配器模式的一部分。
GenericAdapter:该接口描述了一个通用的适配器。一切对象都可以被代理。
Command:这个command接口,为命令模式向上的命令接口。
GroupCommand、ShapeCommand、UngroupCommand :这三个类用于组图形和解组状态以及绘制图形。
AbstractShapeObjectMouseEvent:这个类描述了鼠标事件。在使用的时,它必须是在形状对象执行类的一个成员。
CircleObjectMouseEventHandler、EllipseObjectMouseEventHandler、GroupObjectMouseEventHandler、PathObjectMouseEventHandler、PolygonObjectMouseeventHandler:这五个类都继承与
AbstractShapeObjectMouseEvent这个鼠标事件类,用于定义各自图形鼠标事件的实现。
MainController:这个类实现自Initializable接口,用于初始化界面,及实现界面按钮方法。
Mediator:这个接口是用来描述任何可能的调解类的调解模式。
Collegue:这个接口应该被用来定义在中介模式的同事接口。
Cache:这个类是用来通过请求克隆原型对象。它是一个线程安全Singleton。用来得到的原型,getShape()方法使用通过给枚举类型,以指示正确的形状。它是在调解模式的中介作用。
CircleObject、EllipaseObject、GroupObject、PathObject、RectangleObject、SqurareObjecct、TriangleObject:这几个类都是图形类,都继承与其上层图形类,也实现了ShapeObject接口。
Main:继承自Application类,用来启动java软件。
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);
s cene.getStylesheets().add("/at/fh/swp/graphicseditor/gui/Main.css");
primaryStage.setTitle("Graphics Editor");
primaryStage.setScene(scene);
primaryStage.setResizable(false);
primaryStage.show();
}
catch (IOException e)
{
e.printStackTrace();
}
}