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

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

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

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

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

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

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

6、a軟件。3 系統(tǒng)實(shí)現(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(); 按鈕的實(shí)現(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 點(diǎn)擊繪圖實(shí)現(xiàn)點(diǎ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: 這里用到了命令模式,主要實(shí)現(xiàn)了client與具體實(shí)現(xiàn)者的解耦,所有的命令有Invoker發(fā)出。3.3 事件處理實(shí)現(xiàn)事件處理的代碼:(點(diǎ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 獲取圖形獲取圖形實(shí)例代碼: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 撤銷與恢復(fù)操作撤銷與恢復(fù)操作代碼: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 測(cè)試對(duì)畫(huà)圖軟件進(jìn)行功能測(cè)試,對(duì)于繪制基本圖形的繪畫(huà),以及對(duì)于填充顏色,邊框顏色沒(méi)有問(wèn)題。對(duì)于拖拽功能、點(diǎn)選,以及撤銷和恢復(fù)功能的操作也沒(méi)有問(wèn)題。5 總結(jié)本軟件的設(shè)計(jì)初衷,是為了學(xué)習(xí)設(shè)計(jì)模式,在本軟件的設(shè)計(jì)中,其實(shí)用到了六種模式:?jiǎn)卫J剑钫吣J?,代理模式,原型模式,中介者模式及組合模式,用心觀察才能體會(huì)到其中的作用。這使本軟件具備了更好的擴(kuò)展性。當(dāng)然也是為了學(xué)習(xí)javafx對(duì)于RIA程序的編寫。本軟件還存在一些問(wèn)題,例如,不能持久化等。有待后續(xù)填補(bǔ)。參考文獻(xiàn)1 Bruce Eckel. Thinking in JavaM. Upper Saddle River, New Jersey, USA:

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論