下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、.軟件體系結(jié)構(gòu)實(shí)驗(yàn)報(bào)告項(xiàng)目名稱設(shè)計(jì)模式實(shí)驗(yàn)二專業(yè)班級(jí)軟件 1501學(xué)號(hào)姓名實(shí)驗(yàn)成績(jī):批閱教師:2017年12月12日;.實(shí)驗(yàn) 2 設(shè)計(jì)模式實(shí)驗(yàn)一實(shí)驗(yàn)學(xué)時(shí):4每組人數(shù):1實(shí)驗(yàn)類型:3( 1:基礎(chǔ)性2:綜合性3:設(shè)計(jì)性4:研究性)實(shí)驗(yàn)要求:1( 1:必修2:選修3:其它)實(shí)驗(yàn)類別:3( 1:基礎(chǔ)2:專業(yè)基礎(chǔ)3:專業(yè)4:其它)一、實(shí)驗(yàn)?zāi)康?熟練使用面向?qū)ο笤O(shè)計(jì)原則對(duì)系統(tǒng)進(jìn)行重構(gòu);2熟練使用PowerDesigner 和任意一種面向?qū)ο缶幊陶Z(yǔ)言實(shí)現(xiàn)幾種常見的創(chuàng)建型設(shè)計(jì)模式和結(jié)構(gòu)型設(shè)計(jì)模式,包括簡(jiǎn)單工廠模式、工廠方法模式、抽象工廠模式、單例模式、適配器模式、 橋接模式和組合模式,理解每一種設(shè)計(jì)模式的模式
2、動(dòng)機(jī),掌握模式結(jié)構(gòu),學(xué)習(xí)如何使用代碼實(shí)現(xiàn)這些模式。二、實(shí)驗(yàn)內(nèi)容1在某圖形庫(kù)API 中提供了多種矢量圖模板,用戶可以基于這些矢量圖創(chuàng)建不同的顯示圖形,圖形庫(kù)設(shè)計(jì)人員設(shè)計(jì)的初始類圖如下所示:ClientCircleTriangleRectangle+ init (): void+ init (): void+ init (): void+ setColor (): void+ setColor (): void+ setColor (): void+ fill (): void+ fill (): void+ fill (): void+ setSize (): void+ setSize ():
3、 void+ setSize (): void+ display (): void+ display (): void+ display (): void.在該圖形庫(kù)中,每個(gè)圖形類(如Circle 、 Triangle 等)的 init() 方法用于初始化所創(chuàng)建的圖形, setColor() 方法用于給圖形設(shè)置邊框顏色,fill() 方法用于給圖形設(shè)置填充顏色, setSize()方法用于設(shè)置圖形的大小,display() 方法用于顯示圖形??蛻纛?(Client) 在使用該圖形庫(kù)時(shí)發(fā)現(xiàn)存在如下問題: 由于在創(chuàng)建窗口時(shí)每次只需要使用圖形庫(kù)中的一種圖形,因此在更換圖形時(shí)需要修改客戶類源代碼;;.
4、 在圖形庫(kù)中增加并使用新的圖形時(shí)需要修改客戶類源代碼; 客戶類在每次使用圖形對(duì)象之前需要先創(chuàng)建圖形對(duì)象,有些圖形的創(chuàng)建過程較為復(fù)雜,導(dǎo)致客戶類代碼冗長(zhǎng)且難以維護(hù)?,F(xiàn)需要根據(jù)面向?qū)ο笤O(shè)計(jì)原則對(duì)該系統(tǒng)進(jìn)行重構(gòu),要求如下: 隔離圖形的創(chuàng)建和使用,將圖形的創(chuàng)建過程封裝在專門的類中,客戶類在使用圖形時(shí)無須直接創(chuàng)建圖形對(duì)象,甚至不需要關(guān)心具體圖形類類名; 客戶類 能夠方便地更換圖形或使用新增圖形,無須針對(duì)具體圖形類編程,符合開閉原則。繪制重構(gòu)之后的類圖并說明在重構(gòu)過程中所運(yùn)用的面向?qū)ο笤O(shè)計(jì)原則。2在某 RPG 游戲中使用簡(jiǎn)單工廠模式創(chuàng)建游戲角色,該游戲可根據(jù)用戶所選擇的參數(shù)來創(chuàng)建不同的角色(Role),例
5、如參數(shù)為“angel”時(shí)創(chuàng)建一個(gè)天使角色,參數(shù)為“hero”時(shí)創(chuàng)建一個(gè)英雄角色,參數(shù)為“ witch ”時(shí)創(chuàng)建一個(gè)女巫角色。繪制類圖并使用 Java 語(yǔ)言編程模擬實(shí)現(xiàn)。3. 現(xiàn)需要設(shè)計(jì)一個(gè)程序來讀取多種不同類型的圖片格式,針對(duì)每一種圖片格式都設(shè)計(jì)一個(gè)圖片讀取器 (ImageReader),如 GIF 圖片讀取器 (GifReader) 用于讀取 GIF 格式的圖片、 JPG圖片讀取器(JpgReader)用于讀取JPG 格式的圖片。圖片讀取器對(duì)象通過圖片讀取器工廠ImageReaderFactory 來創(chuàng)建, ImageReaderFactory 是一個(gè)抽象類,用于定義創(chuàng)建圖片讀取器的工廠方法
6、, 其子類 GifReaderFactory 和 JpgReaderFactory 用于創(chuàng)建具體的圖片讀取器對(duì)象。使用工廠方法模式設(shè)計(jì)該程序,繪制類圖并編程模擬實(shí)現(xiàn)。需充分考慮系統(tǒng)的靈活性和可擴(kuò)展性。4. 某系統(tǒng)為了改進(jìn)數(shù)據(jù)庫(kù)操作的性能,用戶可以自定義數(shù)據(jù)庫(kù)連接對(duì)象Connection 和語(yǔ)句對(duì)象Statement,針對(duì)不同類型的數(shù)據(jù)庫(kù)提供不同的連接對(duì)象和語(yǔ)句對(duì)象,例如提供Oracle 或 MySQL 專用連接類和語(yǔ)句類,而且用戶可以通過配置文件等方式根據(jù)實(shí)際需要?jiǎng)討B(tài)更換系統(tǒng)數(shù)據(jù)庫(kù)。使用抽象工廠模式設(shè)計(jì)該系統(tǒng),要求繪制對(duì)應(yīng)的類圖并使用Java 語(yǔ)言編程模擬實(shí)現(xiàn)。5. 使用單例模式的思想實(shí)現(xiàn)多例
7、模式 (Multiton) ,確保系統(tǒng)中某個(gè)類的對(duì)象只能存在有限個(gè),例如兩個(gè)或三個(gè),設(shè)計(jì)并編寫代碼實(shí)現(xiàn)一個(gè)多例類。6. 使用單例模式設(shè)計(jì)一個(gè)多文檔窗口(注:在Java AWT/Swing 開發(fā)中可使用JDesktopPane 和 JInternalFrame 來實(shí)現(xiàn)) ,要求在主窗體中某個(gè)內(nèi)部子窗體只能實(shí)例化一次,即只能彈出一個(gè)相同的子窗體,如下圖所示,編程實(shí)現(xiàn)該功能。;.(注:用 C# 或 C+ 實(shí)現(xiàn)類似功能也可以)7. 現(xiàn)有一個(gè)接口DataOperation 定義了排序方法sort(int)和查找方法search(int, int) ,已知類 QuickSort 的 quickSort(i
8、nt) 方法實(shí)現(xiàn)了快速排序算法,類BinarySearch 的binarySearch(int, int) 方法實(shí)現(xiàn)了二分查找算法。試使用適配器模式設(shè)計(jì)一個(gè)系統(tǒng),在不修改源代碼的情況下將類QuickSort 和類 BinarySearch 的方法適配到DataOperation 接口中。繪制類圖并編程實(shí)現(xiàn)。(要求實(shí)現(xiàn)快速排序和二分查找,使用對(duì)象適配器實(shí)現(xiàn))8. 空客 (Airbus) 、波音 (Boeing) 和麥道 (McDonnell-Douglas) 都是飛機(jī)制造商,它們都生產(chǎn)載客飛機(jī) (Passenger Plane)和載貨飛機(jī) (Cargo Plane)?,F(xiàn)需要設(shè)計(jì)一個(gè)系統(tǒng),描述這些
9、飛機(jī)制造商以及它們所制造的飛機(jī)種類。繪制類圖并編程模擬實(shí)現(xiàn)。9. 某移動(dòng)社交軟件欲增加一個(gè)群組 (Group) 功能。通過設(shè)置,用戶可以將自己的動(dòng)態(tài)信息,包括最新動(dòng)態(tài)、新上傳的視頻以及分享的鏈接等,分享給某個(gè)特定的成員(Member) ,也可以分享給某個(gè)群組中的所有成員;用戶可以將成員添加至某個(gè)指定的群組;此外,還允許用戶在一個(gè)群組中添加子群組,以便更加靈活地實(shí)現(xiàn)面向特定人群的信息共享。選擇一種合適的設(shè)計(jì)模式來設(shè)計(jì)該群組功能,要求給出該模式的名稱及定義,結(jié)合場(chǎng)景繪制相應(yīng)的結(jié)構(gòu)圖并編程模擬實(shí)現(xiàn)(類名、方法名和屬性名可自行定義)。10. 某教育機(jī)構(gòu)組織結(jié)構(gòu)如下圖所示:北京總部教務(wù)辦公室湖南分校行政
10、辦公室教務(wù)辦公室長(zhǎng)沙教學(xué)點(diǎn)湘潭教學(xué)點(diǎn)行政辦公室教務(wù)辦公室行政辦公室教務(wù)辦公室行政辦公室;.在該教育機(jī)構(gòu)的OA 系統(tǒng)中可以給各級(jí)辦公室下發(fā)公文,試采用組合模式設(shè)計(jì)該機(jī)構(gòu)的組織結(jié)構(gòu),繪制相應(yīng)的類圖并編程模擬實(shí)現(xiàn),在客戶端代碼中模擬下發(fā)公文。三、實(shí)驗(yàn)要求1. 選擇合適的面向?qū)ο笤O(shè)計(jì)原則對(duì)系統(tǒng)進(jìn)行重構(gòu),正確無誤地繪制重構(gòu)之后的類圖;2. 結(jié)合實(shí)例,正確無誤地繪制簡(jiǎn)單工廠模式、工廠方法模式、抽象工廠模式、單例模式、適配器模式、橋接模式和組合模式的模式結(jié)構(gòu)圖;3. 使用任意一種面向?qū)ο缶幊陶Z(yǔ)言實(shí)現(xiàn)簡(jiǎn)單工廠模式、工廠方法模式、抽象工廠模式、單例模式、適配器模式、橋接模式和組合模式實(shí)例,代碼運(yùn)行正確無誤。四、
11、實(shí)驗(yàn)步驟1. 選擇合適的面向?qū)ο笤O(shè)計(jì)原則對(duì)系統(tǒng)進(jìn)行重構(gòu),使用 PowerDesigner 繪制重構(gòu)之后的類圖;2. 結(jié)合實(shí)例,使用 PowerDesigner 繪制簡(jiǎn)單工廠模式實(shí)例結(jié)構(gòu)圖并用面向?qū)ο缶幊陶Z(yǔ)言實(shí)現(xiàn)該模式實(shí)例;3. 結(jié)合實(shí)例,使用 PowerDesigner 繪制工廠方法模式實(shí)例結(jié)構(gòu)圖并用面向?qū)ο缶幊陶Z(yǔ)言實(shí)現(xiàn)該模式實(shí)例;4. 結(jié)合實(shí)例,使用 PowerDesigner 繪制抽象工廠模式實(shí)例結(jié)構(gòu)圖并用面向?qū)ο缶幊陶Z(yǔ)言實(shí)現(xiàn)該模式實(shí)例;5. 結(jié)合實(shí)例,使用 PowerDesigner 繪制多例模式實(shí)例結(jié)構(gòu)圖并用面向?qū)ο缶幊陶Z(yǔ)言實(shí)現(xiàn)該模式實(shí)例;6. 結(jié)合實(shí)例,使用 PowerDesigne
12、r 繪制單例模式實(shí)例結(jié)構(gòu)圖并用面向?qū)ο缶幊陶Z(yǔ)言實(shí)現(xiàn)該模式實(shí)例。7. 結(jié)合實(shí)例,使用 PowerDesigner 繪制適配器模式實(shí)例結(jié)構(gòu)圖并用面向?qū)ο缶幊陶Z(yǔ)言實(shí)現(xiàn)該模式實(shí)例;8. 結(jié)合實(shí)例,使用 PowerDesigner 繪制橋接模式實(shí)例結(jié)構(gòu)圖并用面向?qū)ο缶幊陶Z(yǔ)言實(shí)現(xiàn)該模式實(shí)例;9. 結(jié)合實(shí)例,使用 PowerDesigner 繪制組合模式實(shí)例結(jié)構(gòu)圖并用面向?qū)ο缶幊陶Z(yǔ)言實(shí)現(xiàn)該模式實(shí)例。五、實(shí)驗(yàn)結(jié)果1. 重構(gòu)之后的類圖:;.重構(gòu)過程中所使用的面向?qū)ο笤O(shè)計(jì)原則及簡(jiǎn)要說明:根據(jù)題意采用了工廠方法模式,所謂工廠模式則是定義一個(gè)用于創(chuàng)建對(duì)象的接口,但是讓子類決定將哪一個(gè)類實(shí)例化。 工廠方法模式讓一個(gè)類的
13、實(shí)例化延遲到子類。 使用了開閉原則,單一職責(zé)原則。2. 類圖:實(shí)現(xiàn)代碼:/代碼顏色使用黑色,字體使用Times New Roman或 Arial ,字號(hào)為五號(hào),如Role 類:public abstract class Role publicabstract void display();.Angle 類:public class Angle extends Role public Angle()public voiddisplay()System.out.println("angle");Hero 類:public class Hero extends Role publ
14、ic Hero()public voiddisplay()System.out.println("hero");Witch 類:public class Witch extends Role publicWitch()public voiddisplay()System.out.println("witch");.RoleFactory類:public class RoleFactory public static Role getRole(String type)Role role = null;if (type.equalsIgnoreCase(&q
15、uot;angle")role = new Angle();if (type.equalsIgnoreCase("witch")role = new Witch();if (type.equalsIgnoreCase("Hero")role = new Hero();return role;.Main 類 (客戶端 ):public class Main public static void main(String args) Role role;role= RoleFactory.getRole("hero");if (r
16、ole=null)System.out.println("創(chuàng)建角色失敗.請(qǐng)檢查參數(shù) ");elserole.display();/System.out.println("Hello World!");3. 類圖:;.實(shí)現(xiàn)代碼:ImageReadeFactary 類:public abstract class ImageReaderFactory public abstract ImageReader createImageReadeer();GifReaderFactory 類:public class GifReaderFactory extends
17、ImageReaderFactory public ImageReader createImageReadeer() GifReader gifReader = new GifReader();return gifReader;JpgReaderFactory 類:public class JpgReaderFactory extends ImageReaderFactory public ImageReader createImageReadeer() JpgReader jpgReader = new JpgReader();return jpgReader;ImageReader 類:p
18、ublic abstract class ImageReader publicvoidreadImage()GifReader 類:public class GifReader extends ImageReaderpublicvoidreadImage()System.out.println(" 通過 GifReader 讀取圖片 ");.JpgReader 類:public class JpgReader extends ImageReaderpublicvoidreadImage()System.out.println(" 通過 JpgReader 讀取圖片
19、 ");XMLUtil類:import org.w3c.dom.Document;import org.w3c.dom.Node;import org.w3c.dom.NodeList;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import java.io.File;public class XMLUtil / 該方法用于從 XML 配置文件中提取具體類類名,并返回一個(gè)實(shí)例對(duì)象public static Object getBean() throws
20、 Exception /創(chuàng)建 DOM 文檔對(duì)象DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();Document document;document = documentBuilder.parse(new File("config.xml");/獲取包含類名的文本結(jié)點(diǎn)NodeList nodeList
21、= document.getElementsByTagName("imageType");Node imageTypeNode = nodeList.item(0).getFirstChild();String imageType = imageTypeNode.getNodeV alue().trim();/通過類名生成實(shí)例對(duì)象并將其返回Class clazz= Class.forName(imageType+"ReaderFactory");Object object = clazz.newInstance();return object;.Main
22、類(客戶端):public class Main public static void main(String args) ImageReaderFactory imageReaderFactory = null;ImageReader imageReader;try imageReaderFactory = (ImageReaderFactory)XMLUtil.getBean(); catch (Exception e) e.printStackTrace();imageReader = imageReaderFactory.createImageReadeer(); imageReade
23、r.readImage();4. 類圖:實(shí)現(xiàn)代碼:;.抽象工廠databaseFactory 類:publicabstract class databaseFactory public abstract Connection createConnection();public abstract Statement createStatement();具體工廠MysqlFactory類:public class MysqlFactory extends databaseFactory Overridepublic Connection createConnection() return new
24、mysqlConnection();Overridepublic Statement createStatement() return new mysqlStatement();具體工廠OracleFactory 類:public class OracleFactory extends databaseFactory Overridepublic Connection createConnection() return new oracleConnection();Overridepublic Statement createStatement() return new oracleState
25、ment();抽象產(chǎn)品Connection類:;.public class Connectionpublic void connection()抽象產(chǎn)品Statement 類:public class Statement public void sattement()具體產(chǎn)品mysqlConnection類:public class mysqlConnection extends Connection public void connection() System.out.println(" 提供 MySql 連接對(duì)象 ");具體產(chǎn)品mysqlStatement 類:pub
26、lic class mysqlStatement extends Statementpublic void sattement() System.out.println(" 提供 mysql 語(yǔ)句對(duì)象 ");具體產(chǎn)品oracleConnection 類:public class oracleConnection extends Connection public void connection() System.out.println(" 提供 oracle 連接對(duì)象 ");具體產(chǎn)品oracleStatement 類:public class oracl
27、eStatement extends Statement ;.public void sattement() System.out.println(" 提供 oracle 語(yǔ)句對(duì)象 ");工具類 XMLUtil:import org.w3c.dom.Document;import org.w3c.dom.Node;import org.w3c.dom.NodeList;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import java.io.
28、File;public class XMLUtil /該方法用于從 XML 配置文件中提取具體類類名,并返回一個(gè)實(shí)例對(duì)象 public static Object getBean() throws Exception /創(chuàng)建 DOM 文檔對(duì)象DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();Document documen
29、t;document = documentBuilder.parse(new File("config.xml");/獲取包含類名的文本結(jié)點(diǎn)NodeList nodeList = document.getElementsByTagName("databaseType");Node databaseTypeNode = nodeList.item(0).getFirstChild();String databaseType = databaseTypeNode.getNodeValue().trim();/通過類名生成實(shí)例對(duì)象并將其返回Class claz
30、z= Class.forName(databaseType+"Factory");Object object = clazz.newInstance();return object;客戶端 Main 類 :public class Main public static void main(String args) ;.databaseFactory daFactory = null;Connection connection ;Statement statement;try daFactory = (databaseFactory)XMLUtil.getBean(); ca
31、tch (Exception e) e.printStackTrace();if (daFactory=null)System.out.println(" 未獲取到對(duì)象");else connection = daFactory.createConnection();statement = daFactory.createStatement();connection.connection();statement.sattement();5. 類圖:實(shí)現(xiàn)代碼:?jiǎn)卫?Multiton:package Singleton;import java.util.*;public cl
32、ass Multiton / 兩個(gè)或者三個(gè)private static ArrayList<Multiton> multitonList = new ArrayList<>(); private final static int NUMBER=3;.private Multiton()public static Multiton getInstance() / TODO: implementif (multitonList.size()<NUMBER)System.out.println(" 創(chuàng)建新實(shí)例成功");Multiton current
33、 =new Multiton();multitonList.add(current);return current;elseSystem.out.println(" 不能創(chuàng)建更多的實(shí)例");return multitonList.get(new Random().nextInt(multitonList.size();客戶端類Client :package Singleton;public class Client public static void main(String args) Multiton m1 = Multiton.getInstance();Multit
34、on m2 = Multiton.getInstance();Multiton m3 = Multiton.getInstance();Multiton m4 = Multiton.getInstance();System.out.println("m1=m2:"+(m1=m2);System.out.println("m2=m3:"+(m2=m4);System.out.println("m3=m4:"+(m3=m4);6;.運(yùn)行結(jié)果:.類圖:實(shí)現(xiàn)代碼:客戶端類Main:public class Main ;.public stat
35、ic void main(String args)System.out.println("Hello World!");new JInternalFrameDemo();類 JInternalFrameDemo :import java.awt.BorderLayout;import java.awt.Container;import java.awt.Dimension;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAda
36、pter;import java.awt.event.WindowEvent;import javax.swing.JButton;import javax.swing.JDesktopPane;import javax.swing.JFrame;public class JInternalFrameDemo extends JFrame implements ActionListener private static JInternalFrame1 internalFrame;Container contentPane = this.getContentPane();public JInte
37、rnalFrameDemo() super("主窗體 ");contentPane.setLayout(new BorderLayout();JButton button = new JButton(" 創(chuàng)建一個(gè)子窗體");button.addActionListener(this);contentPane.add(button, BorderLayout.SOUTH);this.setSize(new Dimension(300, 300);this.setVisible(true);this.addWindowListener(new WindowA
38、dapter() Overridepublic void windowClosing(WindowEvent e) ;.System.exit(0););public void actionPerformed(ActionEvent e) internalFrame = JInternalFrame1.getJInternalFrame1(" 子窗體 ", true, true, true, true); internalFrame.setSize(new Dimension(200, 200); internalFrame.setVisible(true);JDeskto
39、pPane desktopPane = new JDesktopPane();contentPane.add(desktopPane);desktopPane.add(internalFrame);try internalFrame.setSelected(true); catch (java.beans.PropertyVetoException ex) System.out.println("Exception while selecting");類 JInternalFrame1 :import javax.swing.JInternalFrame;public cl
40、ass JInternalFrame1 extends JInternalFrame private static JInternalFrame1 JIF1 = null;private JInternalFrame1(String name, boolean b1, boolean b2, boolean b3, boolean b4) super(name, b1, b2, b3, b4);public static JInternalFrame1 getJInternalFrame1(String name, boolean b1, boolean b2, boolean b3, boo
41、lean b4) if (JIF1 = null) JIF1 = new JInternalFrame1(name, b1, b2, b3, b4); return JIF1;.7. 類圖:實(shí)現(xiàn)代碼:目標(biāo)抽象類DataOperation :public interface DataOperation public void sort(int a,int low,int high);public int search(int srcArray, int start, int end, int key);適配者類QuickSort :public class QuickSort publicvoi
42、d quickSout(int a,int low,int high)int start = low;int end = high;int key = alow;while(end>start)/從后往前比較while(end>start&&aend>=key)/ 如果沒有比關(guān)鍵值小的,比較下一個(gè),直到有比關(guān)鍵值小的交換位置,然后又從前往后比較end-;if(aend<=key)int temp = aend;aend = astart;.astart = temp;/從前往后比較while(end>start&&astart<
43、;=key)/如果沒有比關(guān)鍵值大的,比較下一個(gè),直到有比關(guān)鍵值大的交換位置start+;if(astart>=key)int temp = astart;astart = aend;aend = temp;/ 此時(shí)第一次循環(huán)比較結(jié)束,關(guān)鍵值的位置已經(jīng)確定了。左邊的值都比關(guān)鍵值小,右邊的值都比關(guān)鍵值大,但是兩邊的順序還有可能是不一樣的,進(jìn)行下面的遞歸調(diào)用/遞歸if(start>low)quickSout(a,low,start-1);/ 左邊序列。第一個(gè)索引位置到關(guān)鍵值索引-1if(end<high) quickSout(a,end+1,high);/右邊序列。 從關(guān)鍵值索引
44、+1 到最后一個(gè)適配者類BinarySearch:public class BinarySearch public int binarySearch(int srcArray, int start, int end, int key) int mid = (end - start) / 2 + start;if (srcArraymid = key) return mid;if (start >= end) return -1; else if (key > srcArraymid) return binarySearch(srcArray, mid + 1, end, key);
45、 else if (key < srcArraymid) return binarySearch(srcArray, start, mid - 1, key);.return -1;適配器類DataOpAdapter :public class DataOpAdapter implements DataOperation private QuickSort qSort;private BinarySearch binarySearch;public DataOpAdapter(QuickSort qSort,BinarySearch binarySearch) this.qSort=qSort;this.binarySearch=binarySearch;Overridepublic int search(int srcArray, int start, int end, int key)returnbinarySearch.binarySearch(src
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度國(guó)際貨物保險(xiǎn)合同模板匯編3篇
- 2024年度企業(yè)級(jí)云服務(wù)采購(gòu)與實(shí)施合同3篇
- 學(xué)校心理健康教育活動(dòng)方案范例(2篇)
- 2024年下半年財(cái)務(wù)部工作計(jì)劃模版(2篇)
- 2024年中心學(xué)校安全日活動(dòng)方案與總結(jié)(3篇)
- 機(jī)電科配件管理員崗位責(zé)任制范文(2篇)
- 工貿(mào)企業(yè)抹灰工安全操作規(guī)程范文(2篇)
- 2024年保安試用期工作總結(jié)經(jīng)典版(2篇)
- 隱蔽工程驗(yàn)收管理規(guī)定(4篇)
- 消防安全專項(xiàng)治理實(shí)施方案范例(2篇)
- 2024年大學(xué)計(jì)算機(jī)基礎(chǔ)考試題庫(kù)附參考答案(完整版)
- 《旅游財(cái)務(wù)管理》課件-3貨幣的時(shí)間價(jià)值
- “奔跑吧·少年”重慶市第三屆幼兒體育大會(huì)幼兒體適能活動(dòng)規(guī)程
- 2024版國(guó)開電大??啤吨袊?guó)古代文學(xué)(下)》在線形考(形考任務(wù)1至5)試題及答案 (二)
- Q GDW 11445-2015 國(guó)家電網(wǎng)公司管理信息系統(tǒng)安全基線要求
- 自我效能感研究綜述
- 簡(jiǎn)潔合伙協(xié)議書模板(標(biāo)準(zhǔn)版)
- 人教版四年級(jí)上下冊(cè)英語(yǔ)單詞默寫表(漢譯英)
- 政府會(huì)計(jì)-課后習(xí)題參考答案 童光輝
- 音樂節(jié)演出合作協(xié)議書
- 《學(xué)寫文學(xué)短評(píng)》統(tǒng)編版高一語(yǔ)文必修上冊(cè)
評(píng)論
0/150
提交評(píng)論