




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
實(shí)驗(yàn)五、計(jì)算機(jī)配件1.實(shí)驗(yàn)?zāi)康腟學(xué)習(xí)訪問(wèn)者模式;掌握訪問(wèn)者模式的用法,以及其優(yōu)缺點(diǎn);2.實(shí)驗(yàn)內(nèi)容:2.實(shí)驗(yàn)內(nèi)容:下圖示所給代碼運(yùn)行的效果,按照所給的代碼,類圖和要求,完成對(duì)應(yīng)TounststoreGUI類的設(shè)計(jì)和編程。TouiiststoreGUI輸入界面:MediatorPattern?TouriststoreGUI回MediatorPattern?TouriststoreGUI回Nationality: ChinaSubmit Exit旅游公司輸入客戶信息:國(guó)MediatorPattern?TourChina▼CustomerreservedairticketName:admin.Nationality: ChinaSubmit Exit旅游公司輸入客戶信息:國(guó)MediatorPattern?TourChina▼CustomerreservedairticketName:admin.ID:admin.Nationality:ChinaCustomerreservedairticket:Name:admin,ID:admin,Nationality:ChinaSubmit Exit賓館界面同步獲得旅游公司輸入的客戶信息:l^>]MediatorPattern?HotelSubmit Exit機(jī)場(chǎng)界面同步獲得旅游公司輸入的客戶信息:賓館界面同步獲得旅游公司輸入的客戶信息:l^>]MediatorPattern?HotelSubmit Exit機(jī)場(chǎng)界面同步獲得旅游公司輸入的客戶信息:Customerreservedairticket:Name:admin,ID:admin,Nationality:China類圖:3?訪問(wèn)者模式的優(yōu)缺點(diǎn)1、 優(yōu)點(diǎn)訪問(wèn)者模式使得增加新的操作變得很容易。如果一些操作依賴于一個(gè)復(fù)雜得結(jié)構(gòu)對(duì)彖的話,那么一般而言,增加新的操作會(huì)很復(fù)雜。而使用訪問(wèn)者模式,增加新的操作就意味著增加一個(gè)新的訪問(wèn)者類,因此,變的很容易。訪問(wèn)者模式將有關(guān)的行為集中到一個(gè)訪問(wèn)者對(duì)彖中,而不是分散到一個(gè)個(gè)節(jié)點(diǎn)類中。訪問(wèn)者模式可以跨越幾個(gè)類得等級(jí)結(jié)構(gòu)訪問(wèn)屬于不同的等級(jí)結(jié)構(gòu)的成員類。迭代子只能訪問(wèn)屬于同一個(gè)類型等級(jí)結(jié)構(gòu)的成員對(duì)象,而不能訪問(wèn)屬于不同等級(jí)結(jié)構(gòu)的對(duì)象。訪問(wèn)者模式可以做到這一點(diǎn)。2、 缺點(diǎn)增加新的節(jié)點(diǎn)變的很困難。每增加一個(gè)新的節(jié)點(diǎn)都意味著要在抽彖訪問(wèn)者角色中增加一個(gè)新的抽象操作,并在每一個(gè)具體訪問(wèn)者類中增加相應(yīng)的具體操作。破壞封裝。訪問(wèn)者模式要求訪問(wèn)者對(duì)彖訪問(wèn)者并調(diào)用每一個(gè)節(jié)點(diǎn)對(duì)彖的操作,這隱含了一個(gè)對(duì)所有節(jié)點(diǎn)對(duì)象的要求:它們必須暴露一些自己的操作和內(nèi)部狀態(tài)。不然,訪問(wèn)者的訪問(wèn)者就變得沒有意義。由于訪問(wèn)者對(duì)彖自己會(huì)積累訪問(wèn)者操作所需的狀態(tài),從而使這些狀態(tài)不再存儲(chǔ)在節(jié)點(diǎn)對(duì)彖中,這也是破壞封裝的。4?實(shí)驗(yàn)總結(jié)結(jié)合實(shí)驗(yàn)了解訪問(wèn)者模式,了解什么情況下使用訪問(wèn)者模式。1、 傾斜的擴(kuò)展性訪問(wèn)者模式僅當(dāng)在被訪問(wèn)的類結(jié)構(gòu)非常穩(wěn)定的情況卞使用。換言之,系統(tǒng)很少出現(xiàn)需要加入新節(jié)點(diǎn)的情況。訪問(wèn)者模式允許在節(jié)點(diǎn)中加入新的方法,相應(yīng)的僅僅需要在一個(gè)新的訪問(wèn)者類加入此方法,而不需要在每一個(gè)訪問(wèn)者類中都加入此方法。顯然,訪問(wèn)者模式提供了傾斜的可擴(kuò)展設(shè)計(jì):方法集合的可擴(kuò)展性和類集合的不可擴(kuò)展性。換言之,如果系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)是頻繁變化的,則不適合使用訪問(wèn)者模式。2、 “開一閉”原則和對(duì)變化的封裝面向?qū)﹀璧脑O(shè)計(jì)原則只最重要的便是所謂的“開一閉”原則。一個(gè)軟件系統(tǒng)的設(shè)計(jì)應(yīng)當(dāng)盡量做到對(duì)擴(kuò)展開放,對(duì)修改關(guān)閉。達(dá)到這個(gè)原則的途徑就是遵循“對(duì)變化的封裝”的原則。即在進(jìn)行軟件系統(tǒng)的設(shè)計(jì)時(shí),應(yīng)當(dāng)設(shè)法找出一個(gè)軟件系統(tǒng)中會(huì)變化的部分,將之封裝起來(lái)。很多的系統(tǒng)可以按照算法和數(shù)據(jù)結(jié)構(gòu)分開,也就是說(shuō)一些對(duì)彖含有算法,而另一些對(duì)象含有數(shù)據(jù),接受算法的操作。如果這樣的系統(tǒng)有比較穩(wěn)定的數(shù)據(jù)結(jié)構(gòu),又有易于變化的算法的話,使用訪問(wèn)者沒收就是比較合適的。因?yàn)樵L問(wèn)者沒收使得算法操作的增加變得容易。反過(guò)來(lái),如果一個(gè)系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)對(duì)彖易于變化,經(jīng)常要有新的數(shù)據(jù)對(duì)彖增加進(jìn)來(lái)的話,就不適合使用訪問(wèn)者沒收。因?yàn)樵谠L問(wèn)者沒收中增加新的節(jié)點(diǎn)很困難,要涉及到在抽彖訪問(wèn)者和所有的具體訪問(wèn)者中增加新的方法。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. 本站所有資源如無(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ù)覽,若沒有圖紙預(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫(yī)療軟件合同范例
- 出售固定資產(chǎn)合同范本
- 單方出資合作合同范本
- 農(nóng)村大包建房合同范本
- 合同范例效力
- 印刷合同范本 博客
- 廠房消防設(shè)計(jì)合同范本
- 農(nóng)業(yè)合作社入股合同范本
- 醫(yī)生顧問(wèn)聘用合同范本
- 導(dǎo)演工作室合作合同范本
- 2025人教版一年級(jí)下冊(cè)數(shù)學(xué)教學(xué)進(jìn)度表
- DeepSeek教案寫作指令
- 2025年安徽省合肥熱電集團(tuán)招聘50人歷年高頻重點(diǎn)模擬試卷提升(共500題附帶答案詳解)
- 休學(xué)復(fù)學(xué)申請(qǐng)書
- 北京2025年02月北京市地質(zhì)礦產(chǎn)勘查院所屬事業(yè)單位公開招考工作人員筆試歷年典型考題(歷年真題考點(diǎn))解題思路附帶答案詳解
- DeepSeek零基礎(chǔ)到精通手冊(cè)(保姆級(jí)教程)
- 瓷磚鋪貼勞務(wù)承包協(xié)議書
- 2025年四川司法警官職業(yè)學(xué)院高職單招職業(yè)適應(yīng)性測(cè)試近5年??及鎱⒖碱}庫(kù)含答案解析
- 新建污水處理廠工程EPC總承包投標(biāo)方案(技術(shù)標(biāo))
- 柔性電路板自動(dòng)化制造-深度研究
- 2024年河南建筑職業(yè)技術(shù)學(xué)院高職單招職業(yè)技能測(cè)驗(yàn)歷年參考題庫(kù)(頻考版)含答案解析
評(píng)論
0/150
提交評(píng)論