您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 《设计模式》课程设计+2014210584+蔡勇
西南交通大学课程设计报告设计模式题目:绘图软件的设计与实现姓名:王强学号:2014210493专业:软件工程Email:865437771@qq.com2015年6月西南交通大学课程设计报告第I页目录设计模式................................................................................................................1目录....................................................................................................................21.需求分析..........................................................................................................12.系统设计..........................................................................................................12.1设计框架................................................................................................12.2部分重要UML图展示...........................................................................12.3类的定义................................................................................................33系统实现...........................................................................................................43.1主界面展示............................................................................................43.2点击绘图................................................................................................53.3事件处理................................................................................................63.4获取图形................................................................................................73.5撤销与恢复操作....................................................................................74测试...................................................................................................................85总结...................................................................................................................9西南交通大学课程设计报告第1页1.需求分析使用JAVA语言开发绘图软件,本绘图软件应具备对直线、矩形、圆形等最基本图形的绘制功能,此外,还可以对绘制的图形进行一些操作,如选中图形、移动已经选中的图形、对已经选中的多个图形进行组合、对选中的已经组合的图形进行拆分、改变选中图形的颜色、删除已经选中的图形等。采用面向对象的思想开发本画图软件,为了可重用代码、让代码更容易被他人理解、保证代码可靠性,使用设计模式。在系统中,涉及三大类模式:创建型模式、结构型模式和行为型模式。2.系统设计2.1设计框架在设计java绘图软件时,主要包含了绘图界面的实现和绘图实现,两大主要任务。在实现上,对于绘图界面的实现,采用改了javafxRIA开发,将界面用Main.fxml文件定义,然后通过MainController实现界面初始化及按键方法。对于绘图的实现,采用改了继承在jfxrt包下的各种图形类及javafx.Application类。Jfxrt包下有各种图形的实现及扩展。在最后,将所编写代码,重构为带有设计模式的代码,使所做的软件具有更好的扩展性,职责明确,便于修改。2.2部分重要UML图展示图1适配器对象及其接口图西南交通大学课程设计报告第2页图2命令者对象继承图图3画图对象继承图图4中介者对象继承图图5事件处理继承图西南交通大学课程设计报告第3页图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()方法使用通过给枚举类型,以指示正确的形状。它是在调解模式的中介作用。西南交通大学课程设计报告第4页CircleObject、EllipaseObject、GroupObject、PathObject、RectangleObject、SqurareObjecct、TriangleObject:这几个类都是图形类,都继承与其上层图形类,也实现了ShapeObject接口。Main:继承自Application类,用来启动java软件。3系统实现3.1主界面展示主界面布局的代码在main.fxml中,定义了主界面的布局,界面加载代码:publicvoidstart(finalStageprimaryStage){try{//LoadFXMLfinalParentroot=FXMLLoader.load(getClass().getResource(/at/fh/swp/graphicseditor/gui/Main.fxml));Scenescene=newScene(root);scene.getStylesheets().add(/at/fh/swp/graphicseditor/gui/Main.css);primaryStage.setTitle(GraphicsEditor);primaryStage.setScene(scene);primaryStage.setResizable(false);primaryStage.show();}catch(IOExceptione){e.printStackTrace();}}西南交通大学课程设计报告第5页按钮的实现在MainController中,以Circle代码为例:Buttonfx:id=btnCirclefont=$x2mnemonicParsing=falseonAction=#onCircleprefWidth=100.0text=CircletooltipTooltipprefWidth=150.0text=DrawacircleintheeditortextAlignment=JUSTIFYwrapText=true//tooltip/Button3.2点击绘图实现点击绘图的代码:@FXMLpublicvoidonCircle(ActionEventevent){intid=ShapeTypes.CIRCLE_ID;西南交通大学课程设计报告第6页CommandshapeCmd=newShapeCommand(this.editorPane,Cache.getInstance().getShape(id));History.getInstance().execute(shapeCmd);}@Overridepublicvoiddraw(Panetarget,Objectn){if(ninstanceofNode){target.getChildren().add((Node)n);System.out.println(Draw+target.getChildren());}elsethrownewIllegalArgumentException();}Ps:这里用到了命令模式,主要实现了client与具体实现者的解耦,所有的命令有Invoker发出。3.3事件处理实现事件处理的代码:(点击事件与拖拽为例)publicvoidhandle(MouseEventevent){if(event.getEventType()==MouseEvent.MOUSE_CLICKED){if(event.isShiftDown()){if(Grouper.getInstance().contains(this.m_internalEventBound)){Grouper.getInstance().remove((ShapeObject?,?)event.getSource());}else{Grouper.getInstance().add((ShapeObject?,?)event.getSource());西南交通大学课程设计报告第7页}elseif(event.getEventType()==MouseEvent.MOUSE_DRAGGED){//SetnewlayoutXandYvaluesforpolygonthis.m_internalEventBound.setLayoutX(event.getSceneX()+this.m_deltaPoly.getX());this.m_internalEventBound.setLayoutY(event.getSceneY()+this.m_deltaPoly.getY());}}3.4获取图形获取图形实例代码:publicstaticCachegetInstance(){if(Cache.
本文标题:《设计模式》课程设计+2014210584+蔡勇
链接地址:https://www.777doc.com/doc-7327821 .html