




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、實驗3 創建型設計模式實驗實驗學時: 2 每組人數: 1 實驗類型: 3 (1:基礎性 2:綜合性 3:設計性 4:研究性)實驗要求: 1 (1:必修 2:選修 3:其它)實驗類別: 3 (1:基礎 2:專業基礎 3:專業 4:其它)一、實驗目的1熟練使用面向對象設計原則對系統進行重構;2熟練使用powerdesigner和任意一種面向對象編程語言實現幾種常見的創建型設計模式,包括簡單工廠模式、工廠方法模式、抽象工廠模式和單例模式,理解每一種設計模式的模式動機,掌握模式結構,學習如何使用代碼實現這些模式。二、實驗內容1在某圖形庫api中提供了多種矢量圖模板,用戶可以基于這些矢量圖創建不同的顯示
2、圖形,圖形庫設計人員設計的初始類圖如下所示:在該圖形庫中,每個圖形類(如circle、triangle等)的init()方法用于初始化所創建的圖形, setcolor()方法用于給圖形設置邊框顏色,fill()方法用于給圖形設置填充顏色,setsize()方法用于設置圖形的大小,display()方法用于顯示圖形。客戶類(client)在使用該圖形庫時發現存在如下問題: 由于在創建窗口時每次只需要使用圖形庫中的一種圖形,因此在更換圖形時需要修改客戶類源代碼; 在圖形庫中增加并使用新的圖形時需要修改客戶類源代碼; 客戶類在每次使用圖形對象之前需要先創建圖形對象,有些圖形的創建過程較為復雜,導致客
3、戶類代碼冗長且難以維護。現需要根據面向對象設計原則對該系統進行重構,要求如下: 隔離圖形的創建和使用,將圖形的創建過程封裝在專門的類中,客戶類在使用圖形時無須直接創建圖形對象,甚至不需要關心具體圖形類類名; 客戶類能夠方便地更換圖形或使用新增圖形,無須針對具體圖形類編程,符合開閉原則。繪制重構之后的類圖并說明在重構過程中所運用的面向對象設計原則。2使用簡單工廠模式設計一個可以創建不同幾何形狀(shape),如圓形(circle)、矩形(rectangle)和三角形(triangle)等的繪圖工具類,每個幾何圖形均具有繪制draw()和擦除erase()兩個方法,要求在繪制不支持的幾何圖形時,拋
4、出一個unsupportedshapeexception異常,繪制類圖并編程模擬實現。3. 現需要設計一個程序來讀取多種不同類型的圖片格式,針對每一種圖片格式都設計一個圖片讀取器(imagereader),如gif圖片讀取器(gifreader)用于讀取gif格式的圖片、jpg圖片讀取器(jpgreader)用于讀取jpg格式的圖片。圖片讀取器對象通過圖片讀取器工廠imagereaderfactory來創建,imagereaderfactory是一個抽象類,用于定義創建圖片讀取器的工廠方法,其子類gifreaderfactory和jpgreaderfactory用于創建具體的圖片讀取器對象。試
5、使用工廠方法模式設計該程序,繪制類圖并編程模擬實現。需充分考慮系統的靈活性和可擴展性。4. 某軟件公司欲開發一套界面皮膚庫,可以對桌面軟件進行界面美化。不同的皮膚將提供視覺效果不同的按鈕、文本框、組合框等界面元素,其結構如下圖所示:該皮膚庫需要具備良好的靈活性和可擴展性,用戶可以自由選擇不同的皮膚,開發人員可以在不修改既有代碼的基礎上增加新的皮膚。試使用抽象工廠模式設計該皮膚庫,繪制類圖并編程模擬實現。5. 使用單例模式的思想實現多例模式,確保系統中某個類的對象只能存在有限個,例如兩個或三個,設計并編寫代碼實現一個多例類。6. 使用單例模式設計一個多文檔窗口(注:在java awt/swing
6、開發中可使用jdesktoppane和jinternalframe來實現),要求在主窗體中某個內部子窗體只能實例化一次,即只能彈出一個相同的子窗體,如下圖所示,編程實現該功能。(注:用c#或c+實現類似功能也可以)三、實驗要求1. 選擇合適的面向對象設計原則對系統進行重構,正確無誤地繪制重構之后的類圖;2. 結合實例,正確無誤地繪制簡單工廠模式、工廠方法模式、抽象工廠模式和單例模式的模式結構圖;3. 使用任意一種面向對象編程語言實現簡單工廠模式、工廠方法模式、抽象工廠模式和單例模式實例,代碼運行正確無誤。四、實驗步驟1. 選擇合適的面向對象設計原則對系統進行重構,使用powerdesigner
7、繪制重構之后的類圖;2. 結合實例,使用powerdesigner繪制簡單工廠模式實例結構圖并用面向對象編程語言實現該模式實例;3. 結合實例,使用powerdesigner繪制工廠方法模式實例結構圖并用面向對象編程語言實現該模式實例;4. 結合實例,使用powerdesigner繪制抽象工廠模式實例結構圖并用面向對象編程語言實現該模式實例;5. 結合實例,使用powerdesigner繪制多例模式實例結構圖并用面向對象編程語言實現該模式實例;6. 結合實例,使用powerdesigner繪制單例模式實例結構圖并用面向對象編程語言實現該模式實例。五、實驗結果1. 重構之后的類圖:重構過程中所使
8、用的面向對象設計原則及簡要說明:a. 開閉原則:創建新圖形只要新加入圖形工廠和對應圖形類,不修改源代碼。b. 依賴倒轉原則:針對接口編程。c. 單一職責原則:每個工廠只生產對應圖形。2. 類圖:實現代碼:/代碼顏色使用黑色,字體使用times new roman或arial,字號為五號,如abstract class shapeshape.javapublic interface shape void draw(); void erase();rectangle.javapublic class rectangle implements shape public void draw() sys
9、tem.out.println("draw rectangle"); public void erase() system.out.println("erase rectangle"); circle.javapublic class circle implements shape public void draw() system.out.println("draw circle"); public void erase() system.out.println("erase cir
10、cle"); triangle.javapublic class triangle implements shape public void draw() system.out.println("draw triangle"); public void erase() system.out.println("erase triangle"); shapefactory.javapublic class shapefactory public static shape produceshape(s
11、tring shape) throws unsupportedshapeexception if (shape.equals("circle") system.out.println("circle"); return new circle; else if(shape.equals("triangle") system.out.println("triangl
12、e"); return new triangle; else if(shape.equals("rectangle") system.out.println("rectangle"); return new rectangle; else throw new unsupportedshapeexception(
13、unsupportedshapeexception use); client.javapublic class client public static void main(string args) unsupportedshapeexception.javapublic class unsupportedshapeexception extends exception public unsupportedshapeexception() system.out.println("繪制圖形異常,請確認輸入圖形。"); 3. 類圖:實現代碼:imagereader .javap
14、ublic interface imagereader public void readimage();jpgreader.javapublic class jpgreader implements imagereader public void readimage()system.out.println("read jgp image");gifreader.javapublic class gifreader implements imagereader public void readimage()system.out.println("read gif i
15、mage");imagereaderfactory.javapublic interface imagereaderfactory public imagereader produceimagereader();jpgreaderfactory.javapublic class jpgreaderfactory implements imagereaderfactory public imagereader produceimagereader()system.out.println("jpg reader");return new jpgreader();gif
16、readerfactory.javapublic class gifreaderfactory implements imagereaderfactory public imagereader produceimagereader()system.out.println("gif reader");return new gifreader();client.javapublic class client public static void main(string args) 4. 類圖:實現代碼:abstractbutton.javapublic interface ab
17、stractbutton greenbutton.javapublic class greenbutton implements abstractbutton public void action()system.out.println("green button");bluebutton.javapublic class bluebutton implements abstractbutton public void action() system.out.println("blue button");abstracttextbox.javapubli
18、c interface abstracttextboxpublic void action();greentextbox.javapublic class greentextbox implements abstracttextbox public void action() system.out.println("green textbox");bluetextbox.javapublic class bluetextbox implements abstracttextbox public void action() system.out.println("b
19、lue textbox");abstractcombobox.javapublic interface abstractcombobox public void action();greencombobox.javapublic class greencombobox implements abstractcombobox public void action() system.out.println("green combo box");bluecombobox.javapublic class bluecombobox implements abstractc
20、ombobox public void action() system.out.println("blue combo box");skinfactory.javapublic interface skinfactory public abstractbutton createbutton();public abstracttextbox createtextbox();public abstractcombobox createcombobox();springskinfactory.javapublic class springskinfactory implement
21、s skinfactory public abstractbutton createbutton() system.out.println("生產green button");return new greenbutton();public abstracttextbox createtextbox() system.out.println("生產green textbox");return new greentextbox();public abstractcombobox createcombobox() system.out.println(&quo
22、t;生產green combo box");return new greencombobox();summerskinfactory.javapublic class summerskinfactory implements skinfactory public abstractbutton createbutton() system.out.println("生產 blue button");return new bluebutton();public abstracttextbox createtextbox() system.out.println(&quo
23、t;生產 blue textbox");return new bluetextbox();public abstractcombobox createcombobox() system.out.println("生產 blue combo box");return new bluecombobox();client.javapublic class client public static void main(string args) 5. 類圖:實現代碼:public class compute private static compute instance;
24、private compute() public static compute getinstance(int number) if(number <= 0) system.out.println("請輸入大于0的整數"); if(instance.length = 0) for(int i = 0, i < number, i+) instancei=new singleton(); int x = (int)(math.random() * number); int y = x + 1; system.out.println("調用第y臺電腦&qu
25、ot;); return instancex; 6. 類圖:實現代碼:jinternalframe1.javapackage test;import javax.swing.jinternalframe;public class jinternalframe1 extends jinternalframeprivate static jinternalframe1 jif1 = null;private jinternalframe1(string name, boolean b1, boolean b2, boolean b3, boolean b4)super(name, b1, b2,
26、b3, b4);public static jinternalframe1 getjinternalframe1(string name, boolean b1, boolean b2, boolean b3, boolean b4)if(jif1 = null)jif1 = new jinternalframe1(name, b1, b2, b3, b4);return jif1;jinternalframedemo.javapackage test;import java.awt.borderlayout;import java.awt.container;import java.awt.
27、dimension;import java.awt.event.actionevent;import java.awt.event.actionlistener;import java.awt.event.windowadapter;import java.awt.event.windowevent;import javax.swing.jbutton;import javax.swing.jdesktoppane;import javax.swing.jframe;import javax.swing.jinternalframe;import javax.swing.jtextarea;public class jinternalframedemo extends jframe implements actionlistener private static jinternalframe1 internalframe;container contentpane = this.getcon
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 業績統計管理制度
- 嚴格校門管理制度
- 個人膳食管理制度
- 中國護士管理制度
- 中外戶政管理制度
- 中學總務管理制度
- 中學班會管理制度
- 中學綜治管理制度
- 中學領導管理制度
- 中式保健管理制度
- GB/T 5563-2013橡膠和塑料軟管及軟管組合件靜液壓試驗方法
- GB/T 5497-1985糧食、油料檢驗水分測定法
- 公寓de全人物攻略本為個人愛好而制成如需轉載注明信息
- 團隊建設(完整版)-HR貓貓復習課程
- 五年級讀書分享課件
- 倉庫管理基礎知識培訓
- 自閉癥孤獨癥兒童語言與溝通評估表
- DB32989-2007低壓電氣裝置規程
- 部編版六年級下冊道德與法治知識點大匯總
- T∕CSTE 0008-2020 污水處理用碳源液體乙酸鈉
- Q∕GDW 46 10022.9-2020 主進水閥本體運檢導則
評論
0/150
提交評論