軟件設(shè)計模式與體系結(jié)構(gòu)實驗報告_第1頁
軟件設(shè)計模式與體系結(jié)構(gòu)實驗報告_第2頁
軟件設(shè)計模式與體系結(jié)構(gòu)實驗報告_第3頁
軟件設(shè)計模式與體系結(jié)構(gòu)實驗報告_第4頁
軟件設(shè)計模式與體系結(jié)構(gòu)實驗報告_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

實驗五、計算機配件1.實驗?zāi)康腟學(xué)習(xí)訪問者模式;掌握訪問者模式的用法,以及其優(yōu)缺點;2.實驗內(nèi)容:2.實驗內(nèi)容:下圖示所給代碼運行的效果,按照所給的代碼,類圖和要求,完成對應(yīng)TounststoreGUI類的設(shè)計和編程。TouiiststoreGUI輸入界面:MediatorPattern?TouriststoreGUI回MediatorPattern?TouriststoreGUI回Nationality: ChinaSubmit Exit旅游公司輸入客戶信息:國MediatorPattern?TourChina▼CustomerreservedairticketName:admin.Nationality: ChinaSubmit Exit旅游公司輸入客戶信息:國MediatorPattern?TourChina▼CustomerreservedairticketName:admin.ID:admin.Nationality:ChinaCustomerreservedairticket:Name:admin,ID:admin,Nationality:ChinaSubmit Exit賓館界面同步獲得旅游公司輸入的客戶信息:l^>]MediatorPattern?HotelSubmit Exit機場界面同步獲得旅游公司輸入的客戶信息:賓館界面同步獲得旅游公司輸入的客戶信息:l^>]MediatorPattern?HotelSubmit Exit機場界面同步獲得旅游公司輸入的客戶信息:Customerreservedairticket:Name:admin,ID:admin,Nationality:China類圖:3?訪問者模式的優(yōu)缺點1、 優(yōu)點訪問者模式使得增加新的操作變得很容易。如果一些操作依賴于一個復(fù)雜得結(jié)構(gòu)對彖的話,那么一般而言,增加新的操作會很復(fù)雜。而使用訪問者模式,增加新的操作就意味著增加一個新的訪問者類,因此,變的很容易。訪問者模式將有關(guān)的行為集中到一個訪問者對彖中,而不是分散到一個個節(jié)點類中。訪問者模式可以跨越幾個類得等級結(jié)構(gòu)訪問屬于不同的等級結(jié)構(gòu)的成員類。迭代子只能訪問屬于同一個類型等級結(jié)構(gòu)的成員對象,而不能訪問屬于不同等級結(jié)構(gòu)的對象。訪問者模式可以做到這一點。2、 缺點增加新的節(jié)點變的很困難。每增加一個新的節(jié)點都意味著要在抽彖訪問者角色中增加一個新的抽象操作,并在每一個具體訪問者類中增加相應(yīng)的具體操作。破壞封裝。訪問者模式要求訪問者對彖訪問者并調(diào)用每一個節(jié)點對彖的操作,這隱含了一個對所有節(jié)點對象的要求:它們必須暴露一些自己的操作和內(nèi)部狀態(tài)。不然,訪問者的訪問者就變得沒有意義。由于訪問者對彖自己會積累訪問者操作所需的狀態(tài),從而使這些狀態(tài)不再存儲在節(jié)點對彖中,這也是破壞封裝的。4?實驗總結(jié)結(jié)合實驗了解訪問者模式,了解什么情況下使用訪問者模式。1、 傾斜的擴展性訪問者模式僅當在被訪問的類結(jié)構(gòu)非常穩(wěn)定的情況卞使用。換言之,系統(tǒng)很少出現(xiàn)需要加入新節(jié)點的情況。訪問者模式允許在節(jié)點中加入新的方法,相應(yīng)的僅僅需要在一個新的訪問者類加入此方法,而不需要在每一個訪問者類中都加入此方法。顯然,訪問者模式提供了傾斜的可擴展設(shè)計:方法集合的可擴展性和類集合的不可擴展性。換言之,如果系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)是頻繁變化的,則不適合使用訪問者模式。2、 “開一閉”原則和對變化的封裝面向?qū)﹀璧脑O(shè)計原則只最重要的便是所謂的“開一閉”原則。一個軟件系統(tǒng)的設(shè)計應(yīng)當盡量做到對擴展開放,對修改關(guān)閉。達到這個原則的途徑就是遵循“對變化的封裝”的原則。即在進行軟件系統(tǒng)的設(shè)計時,應(yīng)當設(shè)法找出一個軟件系統(tǒng)中會變化的部分,將之封裝起來。很多的系統(tǒng)可以按照算法和數(shù)據(jù)結(jié)構(gòu)分開,也就是說一些對彖含有算法,而另一些對象含有數(shù)據(jù),接受算法的操作。如果這樣的系統(tǒng)有比較穩(wěn)定的數(shù)據(jù)結(jié)構(gòu),又有易于變化的算法的話,使用訪問者沒收就是比較合適的。因為訪問者沒收使得算法操作的增加變得容易。反過來,如果一個系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)對彖易于變化,經(jīng)常要有新的數(shù)據(jù)對彖增加進來的話,就不適合使用訪問者沒收。因為在訪問者沒收中增加新的節(jié)點很困難,要涉及到在抽彖訪問者和所有的具體訪問者中增加新的方法。TouriststoreGUI代碼:packagecom.shixian5.xing;importjava.awt.event.*;importjava.awt.*;importjavax.swing.*;importjavax.swing.BorderFactory;importjavax.swing.border.Border;importjava.util.ArrayList;importjava.util.Iterator;publicclassTouriststoreGUIextendsJFrame{privateJSplitPanebigSplitPane;privateJScrollPaneshowInfoPane;privateJPanelbtnPanel;privateJEditorPaneeditorPane;privateJComboBoxnationality;privateJLabelIblName,IbllD,nation;privateJTextFieldnameText,iDText;privateStringcusName;privateStringcusID;privateStringcusNation;privateJTextAreadisplay;privateDimensionsize=newDimension(600,210);privatestaticintdivider=370;publicstaticfinalStringTOUR="tour”;publicstaticfinalStringSUBMIT="Submit”;publicstaticfinalStringEXIT="Exit11;privateBusinessMediatorbMediator;privateArrayList<String>cusNames;privateArrayList<String>candidateCusNames;publicTouriststoreGUI(BusinessMediatorbMdtr){super("MediatorPattern-TouriststoreGUIn);bMediator=bMdtr;setUpChoicePanel();setUpScrollPanes();cusNames=newArrayUst<String>();candidateCusNames=newArrayList<String>();bMediator.registerTourGUI(this);}privatevoidsetUpChoicePanel(){nameText=newJTextField(20);iDText=newJTextField(20);nationality=newJComboBoxf);nationality.addltem(,,ChinaH);nationality,additem(”USA”);nationality.addltem(,,EnglandH);nationality.addltem("Franee");nationality.addltemf'GermanyH);nationality,additem(”Russia”);nationality.addltemf'Japan");nationality.addltem("Korea");IblName=newJLabel(HCustomerName:");IbllD=newJLabel("CustomerID:");nation=newJLabel("Nationality:");//CreatetheopenbuttonJButtonsubmitBtn=newJButton(SUBMIT);submitBtn.setMnemonic(KeyEvent.VK_S);JButtonexitButton=newJButton(EXIT);exitButton.setMnemonic(KeyEvent.VK_X);ButtonListenerbtnListener=newButtonListener();//addactionListenersubmitBtn.addActionListener(btnListener);exitButton.addActionListener(btnListener);btnPanel=newJPanel();// GridBagLayoutgridbag=newGridBagLayout();btnPanel.setLayout(gridbag);GridBagConstraintsgbc=newGridBagConstraints();btnPanel.add(lblName);btnPanel.add(nameText);btnPanel.add(lbllD);btnPanel.add(iDText);btnPanel.add(nation);btnPanel.add(nationality);btnPanel.add(submitBtn);btnPanel.add(exitButton);gbc.insets.top=5;gbc.insets.bottom=5;gbc.insets」eft=5;gbc.insets.right=5;gbc.gridx=0;gbc.gridy=0;gridbag.setConstraints(lblName,gbc);gbc.gridx=1;gbc.gridy=0;gridbag.setConstraints(nameText,gbc);gbc.gridx=0;gbc.gridy=1;gridbag.setConstraints(lbllD,gbc);gbc.gridx=1;gbc.gridy=1;gridbag.setConstraints(iDText,gbc);gbc.gridx=0;gbc.gridy=2;gridbag.setConstraints(nation,gbc);gbc.gridx=1;gbc.gridy=2;gridbag.setConstraints(nationality,gbc);gbc.insets」eft=2;gbc.insets.right=2;gbc.insets.top=15;gbc.gridx=0;gbc.gridy=5;gridbag.setConstraints(submitBtn,gbc);gbc.anchor=GridBagConstraints.WEST;gbc.gridx=1;gbc.gridy=5;gridbag.setConstraints(exitButton,gbc);// }privatevoidsetllpScrollPanes(){Borderraisedbevel=BorderFactory.createRaisedBevelBorderf);editorPane=newJEditorPane();display=newJTextArea(15,15);showlnfoPane=newJScrollPane(display);bigSplitPane=newJSplitPane(JSplitPane.HORIZONTAL_SPLIT,btnPanel,showlnfoPane);bigSplitPane.setDividerLocation(divider);getContentPane().add(bigSplitPane);setSize(size);setVisible(true);}publicvoidsetCusName(){cusName=nameText.getText();}publicvoidsetCuslD(){cusID=iDText.getText();}publicvoidsetCusNation(){cusNation=(String)nationality.getSelectedltem();}publicStringgetCusName(){returncusName;}publicStringgetCuslD(){returncusID;}publicStringgetCusNation(){returncusNation;}publicvoidaddCustomer(Stringcus){cusNames.add(cus);publicvoidaddCandidateCustomer(Stringcus){candidateCusNames.add(cus);}publicvoiddisplaylnfoToScreen(Stringtxt){display.append(txt);}publicvoidwriteReservedCusToDB(){Strings;Iteratore=cusNames.iterator();while(e.hasNext()){s=(String)e.next();//trytowritedatatoDB}}publicvoidwriteCandidateCusToDB(){Strings;Iteratore=cusNames.iterator();while(e.hasNext()){s=(String)e.next();//trytowritedatatoDB}}

溫馨提示

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

評論

0/150

提交評論