中南大學設計模式實驗2_第1頁
中南大學設計模式實驗2_第2頁
中南大學設計模式實驗2_第3頁
中南大學設計模式實驗2_第4頁
中南大學設計模式實驗2_第5頁
免費預覽已結束,剩余38頁可下載查看

下載本文檔

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

文檔簡介

1、軟件體系結構實驗報告項目名稱設計模式實驗一專業班級軟件1501學號姓名實驗成績:批閱教師:2017 年12月12日實驗2設計模式實驗一實驗學時:4每組人數:1實驗類型:3(1 :基礎性2:綜合性3:設計性4 :研究性)實驗要求:1(1:必修2:選修3:其它)實驗類別:3(1:基礎2:專業基礎3:專業4:其它)、實驗目的1 熟練使用面向對象設計原則對系統進行重構;2. 熟練使用 PoWerDeSigner和任意一種面向對象編程語言實現幾種常見的創建型設計 模式和結構型設計模式,包括簡單工廠模式、工廠方法模式、抽象工廠模式、單例模式、適 配器模式、橋接模式和組合模式,理解每一種設計模式的模式動機,

2、掌握模式結構,學習如 何使用代碼實現這些模式。、實驗內容1 在某圖形庫 APl中提供了多種矢量圖模板,用戶可以基于這些矢量圖創建不同的顯示圖形,圖形庫設計人員設計的初始類圖如下所示:+ini t ():void+SetColor ():void+fill ():void+SetSiZe ():void+display ():voidCirCIeTrian gle+in it ():void+SetColor ():void+fill ():void+SetSiZe ():void+display ():Void+in it ():void+SetColor ():void+fill ():vo

3、id+SetSiZe ():void+display ():voidReCta ngleClie nt在該圖形庫中,每個圖形類(如 CirCIe、Triangle等)的init()方法用于初始化所創建的 圖形,setColor()方法用于給圖形設置邊框顏色,fill()方法用于給圖形設置填充顏色,SetSiZe() 方法用于設置圖形的大小,display()方法用于顯示圖形。客戶類(Client)在使用該圖形庫時發現存在如下問題: 由于在創建窗口時每次只需要使用圖形庫中的一種圖形,因此在更換圖形時需要修 改客戶類源代碼; 在圖形庫中增加并使用新的圖形時需要修改客戶類源代碼; 客戶類在每次使用圖

4、形對象之前需要先創建圖形對象,有些圖形的創建過程較為復 雜,導致客戶類代碼冗長且難以維護。現需要根據面向對象設計原則對該系統進行重構,要求如下: 隔離圖形的創建和使用,將圖形的創建過程封裝在專門的類中,客戶類在使用圖形時無須直接創建圖形對象,甚至不需要關心具體圖形類類名; 客戶類能夠方便地更換圖形或使用新增圖形,無須針對具體圖形類編程,符合開閉原則。繪制重構之后的類圖并說明在重構過程中所運用的面向對象設計原則。2. 在某RPG游戲中使用簡單工廠模式創建游戲角色,該游戲可根據用戶所選擇的參數來創建不同的角色(RoIe),例如參數為"an gel ”時創建一個天使角色,參數為"

5、hero ”時創建一個英雄角色,參數為"WitCh ”時創建一個女巫角色。繪制類圖并使用JaVa語言編程模擬實現。3. 現需要設計一個程序來讀取多種不同類型的圖片格式,針對每一種圖片格式都設計一個圖片讀取器(ImageReader),如GIF圖片讀取器(GifReader)用于讀取GIF格式的圖片、JPG 圖片讀取器(JPgReader)用于讀取JPG格式的圖片。圖片讀取器對象通過圖片讀取器工廠 ImageReaderFaCtOry來創建,ImageReaderFaCtOry是一個抽象類,用于定義創建圖片讀取器 的工廠方法,其子類GifReaderFaCtOry和JPgReaderF

6、aCtory用于創建具體的圖片讀取器對象。 使用工廠方法模式設計該程序,繪制類圖并編程模擬實現。需充分考慮系統的靈活性和可擴 展性。4. 某系統為了改進數據庫操作的性能,用戶可以自定義數據庫連接對象Connection和語句對象 Stateme nt,針對不同類型的數據庫提供不同的連接對象和語句對象,例如提供OraCIe或MySQL專用連接類和語句類,而且用戶可以通過配置文件等方式根據實際需要動 態更換系統數據庫。使用抽象工廠模式設計該系統,要求繪制對應的類圖并使用JaVa語言編程模擬實現。5. 使用單例模式的思想實現多例模式(MUltitOn),確保系統中某個類的對象只能存在有限個,例如兩個

7、或三個,設計并編寫代碼實現一個多例類。6. 使用單例模式設計一個多文檔窗口(注:在 JaVa AWT/Swing開發中可使用 JDeSktOPPane和JlnternalFrame來實現),要求在主窗體中某個內部子窗體只能實例化一次, 即只能彈出一個相同的子窗體,如下圖所示,編程實現該功能。子宙體Ef國竝擊t-I-內都si體(注:用C#或C+實現類似功能也可以)7. 現有一個接口 DataoPeration 定義了排序方法 sort(int)和查找方法 SearCh(int, int),已知類 QUiCkSOrt的quickSort(int)方法實現了快速排序算法,類BinarySearch的

8、binarySearch(int, int)方法實現了二分查找算法。試使用適配器模式設計一個系統,在不修 改源代碼的情況下將類 QUiCkSOrt和類BinarySearch的方法適配到 DataOPeratiOn接口中。繪 制類圖并編程實現。(要求實現快速排序和二分查找,使用對象適配器實現)8. 空客(AirbUS)、波音(Boeing)和麥道(McDonnell-Douglas)都是飛機制造商,它們都生 產載客飛機(PaSSenger Plane和載貨飛機(Cargo Plane)。現需要設計一個系統,描述這些飛機 制造商以及它們所制造的飛機種類。繪制類圖并編程模擬實現。9. 某移動社交軟

9、件欲增加一個群組(GrOUP)功能。通過設置,用戶可以將自己的動態信息,包括最新動態、新上傳的視頻以及分享的鏈接等,分享給某個特定的成員(Member),也可以分享給某個群組中的所有成員;用戶可以將成員添加至某個指定的群組;此外,還允許用戶在一個群組中添加子群組,以便更加靈活地實現面向特定人群的信息共享。選擇一種合適的設計模式來設計該群組功能,要求給出該模式的名稱及定義,結合場景繪制相應的結構圖并編程模擬實現(類名、方法名和屬性名可自行定義)。10. 某教育機構組織結構如下圖所示:在該教育機構的 OA系統中可以給各級辦公室下發公文,試采用組合模式設計該機構的組織結構,繪制相應的類圖并編程模擬實

10、現,在客戶端代碼中模擬下發公文。三、實驗要求1. 選擇合適的面向對象設計原則對系統進行重構,正確無誤地繪制重構之后的類圖;2. 結合實例,正確無誤地繪制簡單工廠模式、工廠方法模式、抽象工廠模式、單例模式、適配器模式、橋接模式和組合模式的模式結構圖;3. 使用任意一種面向對象編程語言實現簡單工廠模式、工廠方法模式、抽象工廠模式、 單例模式、適配器模式、橋接模式和組合模式實例,代碼運行正確無誤。四、實驗步驟1. 選擇合適的面向對象設計原則對系統進行重構,使用PoWerDeSigner繪制重構之后的類圖;2. 結合實例,使用POWerDeSigner繪制簡單工廠模式實例結構圖并用面向對象編程語言 實

11、現該模式實例;3. 結合實例,使用POWerDeSigner繪制工廠方法模式實例結構圖并用面向對象編程語言 實現該模式實例;4. 結合實例,使用POWerDeSigner繪制抽象工廠模式實例結構圖并用面向對象編程語言 實現該模式實例;5. 結合實例,使用POWerDeSigner繪制多例模式實例結構圖并用面向對象編程語言實現 該模式實例;6. 結合實例,使用POWerDeSigner繪制單例模式實例結構圖并用面向對象編程語言實現 該模式實例。7. 結合實例,使用POWerDeSigner繪制適配器模式實例結構圖并用面向對象編程語言實 現該模式實例;8. 結合實例,使用POWerDeSigner

12、繪制橋接模式實例結構圖并用面向對象編程語言實現 該模式實例;9. 結合實例,使用POWerDeSigner繪制組合模式實例結構圖并用面向對象編程語言實現 該模式實例。五、實驗結果1.重構之后的類圖:Clf: l.tf .-:CFF-I-L- lA WLCCcr Q faL 0E «K>i» 0shl*Iraid:rHi:«!.:£:« C : 1E<L5 0: ZuViii veil*1:1 0CiiIC L Ii 沖血 o : vil"*I<下、Trik-CaCLJPLiir Q .LiIA3*! IJ . IeS

13、SlI重構過程中所使用的面向對象設計原則及簡要說明:根據題意采用了工廠方法模式,所謂工廠模式則是定義一個用于創建對象的接口,但是讓子類決定將哪一個類實例化。工廠方法模式讓一個類的實例化延遲到子類。使用了開閉原則,單一職責原則。2.類圖:¾ I f*弭丸"tfcQ> 3-tr3 tfpJ : BOlRAt4 <n5TMr?alfr ¢)display Q : *idT!i3trujcto>> fro 04L3play C) : *old.T d5pia Q:BidHTlAih<<truct>> KjtCh C)d3sp

14、lj 0 : Ld¥實現代碼:代碼顏色使用黑色,字體使用TimeS NeW Roman 或Arial,字號為五號,如Role 類:PUbIiC abstract class Role PUbIiC abstract void display();Angle 類:PUbliC class An gle exte nds Role PUbIiC An gle()PUbIiC void display()SyStem.out.pri ntln ("a ngle");Hero 類:PUbIiC class Hero exte nds Role PUbIiC Hero()P

15、UbIiC void display()SyStem.out.pri ntln ("hero");WitCh 類:PUbIiC class WitCh exte nds Role PUbIiCWitCh()PUbIiC void display()SyStem.out.pri ntl n("witch");RoleFaCtory 類:PUbliC class RoleFactory PUbIiC StatiC Role getRole(String type)Role role = nu II;if (type.equalslg no reCase(&q

16、uot;a ngle") role = new An gle();if (type.equalsIg no reCase("witch") role = new WitCh();if (type.equalsIg no reCase("Hero") role = new Hero();return role;Main類(客戶端):PUbliC class Mai n PUbliC StatiC Void main(String args) Role role;role= RoleFaCtory.getRole("hero")

17、;if (role=nu ll)SyStem.out.println("創建角色失敗請檢查參數");elserole.display();/SyStem.out.pri ntl n( "Hello World!");3.類圖:a <i-if?EaiK-:62ts住 0: viT ItIL *實現代碼:ImageReadeFaCtary 類:PUbliC abstract class ImageReaderFaCtOry PUbliC abstract ImageReader CreateImageReadeer();GifReaderFaCtOry

18、 類:PUbIiC class GifReaderFaCtOry exte nds ImageReaderFaCtOry PUbIiC ImageReader CreateImageReadeer() GifReader gifReader = new GifReader(); retur n gifReader;JPgReaderFaCtOry 類:PUbIiC class JPgReaderFaCtOry exte nds ImageReaderFaCtOry PUbIiC ImageReader CreateImageReadeer() JPgReader jpgReader = new

19、 JPgReader();retur n jpgReader;ImageReader 類:PUbIiC abstract class ImageReader PUbIiC void readImage()GifReader 類:PUbIiC class GifReader exte nds ImageReaderPUbIiC void readImage()SyStem.out.println("通過 GifReader 讀取圖片");JPgReader 類:PUbliC class JPgReader exte nds ImageReaderPUbIiC void rea

20、dImage()SyStem.out.println("通過 JPgReader讀取圖片");XMLUtil 類:import org.w3c.dom.Docume nt;import org.w3c.dom.Node;import org.w3c.dom.NodeList;import javax.xml.parsers.Docume ntBuilder;import javax.xml.parsers.Docume ntBuilderFactory;import java.io.File;PUbIiC class XMLUtiI ZZ該方法用于從XML配置文件中提取具體

21、類類名,并返回一個實例對象PUbIiC StatiC ObjeCt getBea n() throws EXCePti On /創建DOM文檔對象DOCUme ntBuilderFactorydocume ntBuilderFactoryDOCUme ntBuilderFactory .newln Sta nce();DOCUme ntBuilderdocume ntBuilderdocume ntBuilderFactory .n ewDocume ntBuilder();DOCUme nt docume nt;document = documentBuilder.parse(new Fil

22、e("cOnfig.xml");/獲取包含類名的文本結點NOdeLiSt no deList = docume nt.getEleme ntsByTagName("imageType");Node imageTypeNode = no deList.item(0).getFirstChild();String imageType = imageTypeNode.getNodeV alue().trim();/通過類名生成實例對象并將其返回Class clazz = Class.forName(imageType+"ReaderFactory&q

23、uot;);ObjeCt ObjeCt = clazz .newln Sta nce();return object;Main類(客戶端):PUbliC class Mai n PUbliC StatiC Void main(String args) ImageReaderFaCtory imageReaderFactory = nu II;ImageReader imageReader;try imageReaderFactory = (ImageReaderFaCtOry)XMLUtil.getBea n(); CatCh (EXCePti On e) e.pri ntStackTrace

24、();imageReader = imageReaderFactory.createImageReadeer(); imageReader.readImage();4.類圖: 5aw*m3 -r d3baM,cMT0 MLUDI0 ¾ BtteS WfimertIQl ¾qCPclHEtaMJnani:Q sfftrEBJ vd0© h CWneCUOnuVd dA MHjEinHIq) VDhlCI h MtnrtDj 心G W ulr<5irlngJl Ked tFECaHorO CaIVfedkOn 5-< b CraJKSTaiBmflnilI

25、-S>.J I JIIii1 -CFDJ*> II丄I I<IJF-'*IiliI II a OrACIDFJCfcQrG, MqlFnmryi Ii vduConwccGConnDCrIarIGL muCkih3i(CCI<uwnSunQerbM*ISUWrMHCcr*aE實現代碼:扌由象工廠 databaseFactory類:PUbliC abstract class databaseFactory PUbIiC abstract Conn ecti On CreateC OnneCtion();PUbIiC abstract Stateme nt Crea

26、teStateme nt();具體工廠MySqIFaCtory類:PUbIiC class MySqIFaCtOry exte nds databaseFactory OVerridePUbIiC ConneCtion CreateC OnneCtion() return new mysqlC Onn ectio n();OVerridePUbIiC Stateme nt CreateStateme nt() return new mysqIStateme nt();具體工廠OraCleFaCtory類:PUbIiC class OraCIeFaCtOry exte nds databaseF

27、actory OVerridePUbIiC ConneCtion CreateC OnneCtion() retur n new OracIeC OnneCtion();OVerridePUbIiC Stateme nt CreateStateme nt() return new OracIeStateme nt();抽象產品ConnectiOn 類:PUbliC class ConneCtion PUbIiC void ConneCtion()抽象產品Statement類:PUbIiC class Stateme nt PUbIiC void Satteme nt()具體產品 mysqlCO

28、nneCtion 類:PUbIiC class mysqlC OnneCtion exte nds ConneCtion PUbIiC void connection。SyStem.out.println("提供 MySql 連接對象");具體產品 mysqIStatement類:PUbIiC class mysqIStateme nt exte nds Stateme ntPUbIiC void Satteme nt() SyStem.out.println("提供 mysql 語句對象");具體產品 oracIeCOnneCtion 類:PUbIiC

29、 class oracIeC OnneCtion exte nds ConneCtion PUbIiC void connection。SyStem.out.println("提供 oracle 連接對象");具體產品 OraCleStatement 類:PUbIiC class OracIeStateme nt exte nds Stateme nt PUbIiC Void Satteme nt() SyStem.out.println("提供 oracle 語句對象");工具類XMLUtiI :import org.w3c.dom.Docume nt

30、;import org.w3c.dom.Node;import org.w3c.dom.NodeList;import javax.xml.parsers.Docume ntBuilder;import javax.xml.parsers.Docume ntBuilderFactory;import java.io.File;PUbIiC class XMLUtiI 該方法用于從XML配置文件中提取具體類類名,并返回一個實例對象PUbIiC StatiC ObjeCt getBea n() throws EXCePtiO n 創建DOM文檔對象DOCUme ntBuilderFactorydo

31、cume ntBuilderFactoryDOCUme ntBuilderFactory .newln Sta nce();DOCUme ntBuilderdocume ntBuilderdocume ntBuilderFactory .n ewDocume ntBuilder();DOCUme nt docume nt;docume nt = docume ntBuilder.parse( new File("c On fig.xml");獲取包含類名的文本結點NOdeLiSt no deList = docume nt.getEleme ntsByTagName(&qu

32、ot;databaseType");Node databaseTypeNode = no deList.item(O).getFirstChild();String databaseType = databaseTypeNode.getNodeVaIue().trim();/通過類名生成實例對象并將其返回Class clazz = CIass.forName(databaseType+"Factory");ObjeCt ObjeCt = clazz .newln Sta nce();return object;客戶端Main類:PUbIiC class Mai n

33、 PUbIiC StatiC void main(String args) databaseFactory daFactory = n ull;Conn ecti OnConneCtion ;Stateme nt Stateme nt;try daFactory = (databaseFactory)XMLUtil.getBea n(); CatCh (EXCePti On e) e.pri ntStackTrace();if (daFactory=nu ll)SyStem.out.println("未獲取到對象");else ConneCtion = daFactory.

34、createC OnneCtion();Stateme nt = daFactory.createStateme nt();ConneCtion.connection。;Stateme nt.satteme nt();5.類圖:實現代碼:單例類MUItitOn :PaCkage Sin glet on;import java.util.*;PUbIiC class MUItit On /兩個或者三個PriVate StatiC ArrayLiSt<Multiton> multitonLiSt = new ArrayLiSt<>();PriVate final Stati

35、C int NUMBER=3;PriVate MUltito n()PUbIiC StatiC MUItit On getI nsta nce() / TODO: impleme ntif (multito nList.size()<NUMBER)SyStem.out.println("創建新實例成功");MUItit On CUrre nt =new MUItit on();multit On List.add(curre nt);return CUrre nt;elseSyStem.out.println("不能創建更多的實例");retur

36、n multit On List.get (new Ran dom(). next In t(multit On List.size();客戶端類 Client :PaCkage Sin glet on;PUbIiC class Clie nt PUbIiC StatiC void main(String args) MUItiton m1 = MUItitOn.getInstance();MUItiton m2 = MUItiton.getInstance();MUItiton m3 = MUItiton.getInstance();MUItit On m4 = MUItito n.getl

37、 nsta nce();SyStem.out.pri ntln ("m1=m2:"+(m1=m2);SyStem.out.pri ntl n( "m2=m3:"+(m2=m4);SyStem.out.pri ntln ("m3=m4:"+(m3=m4);6運行結果:類圖:JIntemalFrameJFO I JlFlJinterrWiFrameIQJInteraIFrame 1 (Strtngr tx>olear boolean,JnJ boolean)0 -geInternaIFrame 1 (SUlngI boolean,

38、boolean, booEeal boolean)JlnternaIFirameI1JInterrialFrameDemOW tInternIFraiTIeJlnternaIFramelT «sntetPaneCanerGJIFTternalFrameDemo(aCIOn Pe rform dActi EveQVOld101IfI Wmaln(S(ringVE>ld實現代碼:客戶端類Main:PUbliC class Mai n PUbliC StatiC Void main( Stri ng args)SyStem.out.println("Hello World!

39、");new Jln ternalFrameDemo();類 JInternalFrameDemo :import java.awt.BorderLayout;import java.awt.C Ontainer;import java.awt.Dime nsion;import java.awt.eve nt.Act ionEvent;import java.awt.eve nt.Act ion LiSte ner;import java.awt.eve nt.Wi ndowAdapter;import java.awt.eve nt.Wi ndowEve nt;import ja

40、vax.swi ng.J BUtt on;import javax.swi ng.J DeSktOPPa ne;import javax.swi ng.JF rame;PUbIiC class JI nternalFrameDemo exte nds JFrame impleme nts ACtion LiSte ner PriVate StatiC JIn ternalFrame1 in ternalFrame;ContainerConten tPa ne = this.getC Onten tPa ne();PUbIiC JI nternalFrameDemo() super("

41、主窗體");Conten tPa ne.setLayout (new BOrderLayout();JBUttOn button = new JBUttOn("創建一個子窗體");butt on .addAct ion LiSte ner(this);Conten tPa ne.add(butt on, BOrderLayout.SOUTH);this.setSize(new Dimension(300, 300);this.setVisible(true);this.addWi ndowListe ner(new Win dowAdapter() OVerrid

42、ePUbIiC void Win dowClos in g(Wi ndowEve nt e) SyStem.exit(O););PUbIiC Void acti On PerfOrmed(ACt ion EVe nt e) internalFrame = JlnternalFrame1.getJInternalFrame1(" 子窗體", true, true, true, true);in ternalFrame.setSize( new Dime nsio n(200, 200);in ternalFrame.setVisible(true);JDeSktOPPa ne

43、 desktopPa ne = new JDeSktOPPa ne();Conten tPa ne.add(desktopPa ne); desktopPa ne.add(i ntern alFrame);try intern alFrame.setSelected(true); CatCh (java.bea ns.PropertyVetoExcepti On ex) SyStem.out.pri ntl n("Excepti On while SeIeCt in g");類 JlnternalFrame1 :import javax.swi ng.JIn ternalF

44、rame;PUbIiC class Jlntern alFrame1 exte nds Jln ternalFrame PriVate StatiC Jlntern alFrame1 JIF1 = n ull;PriVate JInternalFrame1(String name, boolean b1, boolean b2, boolean b3, boolean b4) super( name, b1, b2, b3, b4);PUbIiC StatiC JInternalFrame1 getJInternalFrame1(String name, boolean b1, boolean

45、 b2, boolea n b3, boolea n b4) if (JIF1 = nUlI) JIF1 = new JInternalFrame1(name, b1, b2, b3, b4);return JIF1; EI QUICkSDrt BlnarySsarchO DatdoPerdtIOnQ -= MnIllnIlLlnl Init)VOhd Gl - srchrift(1 IntI Int) Int7.類圖:O l qukkSoMir<a IrtI inc) VoId G) r binarysearch(InUII IrrtI it Int) InltiA*/K1 : ! 1

46、 ;"5 L0 rfa DataOPAdapterO : CJSartIQUlCkSOrtG HnarySearchSInarySearehODHta OPAeh plrtQufciScHt BiniarySea rch sea rc( lm1 kt+lnti Iffi)'in.O HMKIntJjUtVOldAcr ate*WWqq二三0 h MaIn.Q mln(StFing)wId實現代碼:目標抽象類DataoPeratiOn :PUbliC in terface DataOPerati On PUbIiC void sort(i nt a,i nt low,i nt

47、high);PUbIiC int SearCh(i nt SrCArra y, int Start, int end, int key);適配者類QUiCkSOrt:PUbIiC class QUiCkSOrt PUbIiC void quickSout(i nt a,i nt low,i nt high)int Start = low;int end = high;int key = alow;while(e nd>start)/從后往前比較while(e nd>start&&ae nd>=key)/如果沒有比關鍵值小的,比較下一個,直到有比關鍵值小的交換位

48、置,然后又從前往后比較en d-;if(ae nd<=key)int temp = ae nd;ae nd = astart;astart = temp;/從前往后比較while(end>start&&astart<=key)/如果沒有比關鍵值大的,比較下一個,直到有比關鍵值大的交換位置start+;if(astart>=key)int temp = astart;astart = ae nd; ae nd = temp;/此時第一次循環比較結束,關鍵值的位置已經確定了。左邊的值都比關鍵值小,右邊的值都比關鍵值大,但是兩邊的順序還有可能是不一樣的,進行下

49、面的遞 歸調用/遞歸if(start>low) quickSout(a,low,start-1);/左邊序列。第一個索引位置到關鍵值索引-1if(end<high) quickSout(a,end+1,high);/右邊序列。從關鍵值索引+1到最后一個 適配者類 BinarySearch:PUbIiC class Bin arySearch PUbIiC int bin arySearch(i nt SrCArray, int Start, int end, int key)int mid = (end - Start) / 2 + start;if (SrCArraymid =

50、key) return mid;if (Start >= end) return -1; else if (key > SrCArraymid) return bin arySearch(srcArray, mid + 1, end, key); else if (key < SrCArraymid) retur n bin arySearch(srcArray, start, mid - 1, key);return -1;適配器類 DataoPAdaPter:PUbliC class DataOPAdaPter impleme nts DataOPerati On Pri

51、Vate QUiCkSOrt qSort;PriVate Bin arySearch bin arySearch;PUbIiC DataOPAdaPter(QUiCkSOrt qSort,B in arySearch bin arySearch) this.qSort=qSort;this.b in arySearch=b in arySearch;OVerridePUbIiC int SearCh(i nt SrCArra y, int Start, int end, int key)retur n bin arySearch.b in arySearch(srcArray,start,e

52、nd,key);OVerridePUbIiC void sort(i nt a,i nt low,i nt high) qSort.quickSout(a,low,high);客戶端類Main :PUbIiC class Mai n PUbIiC StatiC void main(String args) DataOPeratiO ndataOperati On =newDataOPAdapter( newQUiCkSort(),newBin arySearch();in t a = 12,20,5,16,15,1,30,45,23,9;SyStem.out.println("排序前

53、:");for(i nt i = 0; i<a .Ien gth; i+)SyStem.out.pri nt(ai+"");int Start = 0;int end = a.len gth-1;dataOperati on. sort(a,start,e nd);SyStem.out.println("n"+"實現快速排序:");for(i nt i = 0; i<a .Ien gth; i+)SyStem.out.pri nt(ai+"");SyStem.out.println("

54、;n"+"實現了二分查找算法,查找“ 20” ");SyStem.out.pri ntln( dataOperati on. SearCh(a,0,a .Ien gth -1,20);8.類圖:PIdnePaCkage BridgePatter n;crtPlsf½ VOId布Jr0 匕 PrOdUCtfflrI總 r PraduB) voi<d PtaneO Pe0 PaSSengerPIaneO - CredtePLane)Wid0 CargOWanieQ CreJtePIaIn¢()VOki I-*cfea*-h AIirbUSPrQ0 - McO

溫馨提示

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

評論

0/150

提交評論