《設計模式》課程設計+2014210584+蔡勇_第1頁
《設計模式》課程設計+2014210584+蔡勇_第2頁
《設計模式》課程設計+2014210584+蔡勇_第3頁
《設計模式》課程設計+2014210584+蔡勇_第4頁
《設計模式》課程設計+2014210584+蔡勇_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、精選優(yōu)質文檔-傾情為你奉上西 南 交 通 大 學課程設計報告設計模式 題目: 繪圖軟件的設計與實現(xiàn) 姓名: 王 強 學號: 專業(yè): 軟件工程 Email: 2015年6月目 錄專心-專注-專業(yè)1. 需求分析使用JAVA語言開發(fā)繪圖軟件,本繪圖軟件應具備對直線、矩形、圓形等最基本圖形的繪制功能,此外,還可以對繪制的圖形進行一些操作,如選中圖形、移動已經(jīng)選中的圖形、對已經(jīng)選中的多個圖形進行組合、對選中的已經(jīng)組合的圖形進行拆分、改變選中圖形的顏色、刪除已經(jīng)選中的圖形等。采用面向對象的思想開發(fā)本畫圖軟件,為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性,使用設計模式。在系統(tǒng)中,涉及三大類模式:創(chuàng)

2、建型模式、結構型模式和行為型模式。2. 系統(tǒng)設計2.1 設計框架 在設計java繪圖軟件時,主要包含了繪圖界面的實現(xiàn)和繪圖實現(xiàn),兩大主要任務。在實現(xiàn)上,對于繪圖界面的實現(xiàn),采用改了javafxRIA開發(fā),將界面用Main.fxml文件定義,然后通過MainController實現(xiàn)界面初始化及按鍵方法。對于繪圖的實現(xiàn),采用改了繼承在jfxrt包下的各種圖形類及javafx.Application類。Jfxrt包下有各種圖形的實現(xiàn)及擴展。在最后,將所編寫代碼,重構為帶有設計模式的代碼,使所做的軟件具有更好的擴展性,職責明確,便于修改。2.2 部分重要UML圖展示 圖1 適配器對象及其接口圖 圖2

3、命令者對象繼承圖 圖3 畫圖對象繼承圖 圖4 中介者對象繼承圖 圖5 事件處理繼承圖圖6 圖形類繼承圖2.3 類的定義CollegueAdapter:這個類是用來適應JavaFX組件原型Cacha類。它是適配器模式的一部分。GenericAdapter:該接口描述了一個通用的適配器。一切對象都可以被代理。Command:這個command接口,為命令模式向上的命令接口。GroupCommand、ShapeCommand、UngroupCommand : 這三個類用于組圖形和解組狀態(tài)以及繪制圖形。AbstractShapeObjectMouseEvent:這個類描述了鼠標事件。在使用的時,它必須

4、是在形狀對象執(zhí)行類的一個成員。CircleObjectMouseEventHandler、EllipseObjectMouseEventHandler、GroupObjectMouseEventHandler、PathObjectMouseEventHandler、PolygonObjectMouseeventHandler:這五個類都繼承與AbstractShapeObjectMouseEvent這個鼠標事件類,用于定義各自圖形鼠標事件的實現(xiàn)。MainController:這個類實現(xiàn)自Initializable接口,用于初始化界面,及實現(xiàn)界面按鈕方法。Mediator:這個接口是用來描述任何

5、可能的調解類的調解模式。Collegue:這個接口應該被用來定義在中介模式的同事接口。Cache:這個類是用來通過請求克隆原型對象。它是一個線程安全Singleton。用來得到的原型,getShape()方法使用通過給枚舉類型,以指示正確的形狀。它是在調解模式的中介作用。CircleObject、EllipaseObject、GroupObject、PathObject、RectangleObject、SqurareObjecct、TriangleObject:這幾個類都是圖形類,都繼承與其上層圖形類,也實現(xiàn)了ShapeObject接口。Main:繼承自Application類,用來啟動jav

6、a軟件。3 系統(tǒng)實現(xiàn)3.1 主界面展示主界面布局的代碼在main.fxml中,定義了主界面的布局,界面加載代碼:public void start(final Stage primaryStage)try/ Load FXMLfinal Parent root = FXMLLoader.load(getClass().getResource("/at/fh/swp/graphicseditor/gui/Main.fxml");Scene scene = new Scene(root);scene.getStylesheets().add("/at/fh/swp/g

7、raphicseditor/gui/Main.css");primaryStage.setTitle("Graphics Editor");primaryStage.setScene(scene);primaryStage.setResizable(false);primaryStage.show();catch (IOException e)e.printStackTrace(); 按鈕的實現(xiàn)在MainController中,以Circle代碼為例:<Button fx:id="btnCircle" font="$x2&quo

8、t; mnemonicParsing="false" onAction="#onCircle" prefWidth="100.0" text="Circle"><tooltip><Tooltip prefWidth="150.0" text="Draw a circle in the editor" textAlignment="JUSTIFY" wrapText="true" /></tooltip

9、></Button>3.2 點擊繪圖實現(xiàn)點擊繪圖的代碼:FXMLpublic void onCircle(ActionEvent event)int id = ShapeTypes.CIRCLE_ID;Command shapeCmd = new ShapeCommand(this.editorPane, Cache.getInstance().getShape(id);History.getInstance().execute(shapeCmd);Overridepublic void draw(Pane target, Object n)if (n instanceof

10、Node)target.getChildren().add(Node) n);System.out.println("Draw " + target.getChildren();else throw new IllegalArgumentException();Ps: 這里用到了命令模式,主要實現(xiàn)了client與具體實現(xiàn)者的解耦,所有的命令有Invoker發(fā)出。3.3 事件處理實現(xiàn)事件處理的代碼:(點擊事件與拖拽為例)public void handle(MouseEvent event) if (event.getEventType() = MouseEvent.MOUS

11、E_CLICKED)if (event.isShiftDown()if (Grouper.getInstance().contains(this.m_internalEventBound)Grouper.getInstance().remove(ShapeObject< ?, ? >) event.getSource();else Grouper.getInstance().add(ShapeObject< ?, ? >) event.getSource();else if (event.getEventType() = MouseEvent.MOUSE_DRAGGED

12、)/ Set new layout X and Y values for polygonthis.m_internalEventBound.setLayoutX(event.getSceneX() + this.m_deltaPoly.getX();this.m_internalEventBound.setLayoutY(event.getSceneY() + this.m_deltaPoly.getY();3.4 獲取圖形獲取圖形實例代碼:public static Cache getInstance()if (Cache.m_instance = null)synchronized (Ca

13、che.class)if (Cache.m_instance = null)Cache.m_instance = new Cache();return Cache.m_instance;Ps:這里用到了單例模式。3.5 撤銷與恢復操作撤銷與恢復操作代碼: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 (

14、!m_redos.isEmpty()Command cmd = m_redos.pop();cmd.redo();m_undos.push(cmd);else System.out.println("Nothing to redo.");4 測試對畫圖軟件進行功能測試,對于繪制基本圖形的繪畫,以及對于填充顏色,邊框顏色沒有問題。對于拖拽功能、點選,以及撤銷和恢復功能的操作也沒有問題。5 總結本軟件的設計初衷,是為了學習設計模式,在本軟件的設計中,其實用到了六種模式:單例模式,命令者模式,代理模式,原型模式,中介者模式及組合模式,用心觀察才能體會到其中的作用。這使本軟件具備了更好的擴展性。當然也是為了學習javafx對于RIA程序的編寫。本軟件還存在一些問題,例如,不能持久化等。有待后續(xù)填補。參考文獻1 Bruce Eckel. Thinking in JavaM. Upper Saddle River, New Jersey, USA:

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論