软件设计模式与体系结构实验报告

上传人:lis****210 文档编号:215583772 上传时间:2023-06-02 格式:DOCX 页数:10 大小:13.88KB
收藏 版权申诉 举报 下载
软件设计模式与体系结构实验报告_第1页
第1页 / 共10页
软件设计模式与体系结构实验报告_第2页
第2页 / 共10页
软件设计模式与体系结构实验报告_第3页
第3页 / 共10页
资源描述:

《软件设计模式与体系结构实验报告》由会员分享,可在线阅读,更多相关《软件设计模式与体系结构实验报告(10页珍藏版)》请在装配图网上搜索。

1、软件设计模式与体系结构实验报告实验五、计算机配件1. 实验目的:学习访问者模式;掌握访问者模式的用法,以及其优缺点;2. 实验内容: 下图示所给代码运行的效果,按照所给的代码,类图和要求, 完成对应 TouriststoreGUI 类的设计和编程。TouriststoreGUI 输入界面:旅游公司输入客户信息:宾馆界面同步获得旅游公司输入的客户信息:机场界面同步获得旅游公司输入的客户信息:类图:3. 访问者模式的优缺点1、优点(1) 访问者模式使得增加新的操作变得很容易。如果一些操 作依赖于一个复杂得结构对象的话,那么一般而言,增加新的操 作会很复杂。而使用访问者模式,增加新的操作就意味着增加

2、一 个新的访问者类,因此,变的很容易。(2) 访问者模式将有关的行为集中到一个访问者对象中,而 不是分散到一个个节点类中。(3) 访问者模式可以跨越几个类得等级结构访问属于不同的 等级结构的成员类。迭代子只能访问属于同一个类型等级结构的 成员对象,而不能访问属于不同等级结构的对象。访问者模式可 以做到这一点。 2、缺点(1)增加新的节点变的很困难。每增加一个新的节点都意味 着要在抽象访问者角色中增加一个新的抽象操作,并在每一个具 体访问者类中增加相应的具体操作。(2)破坏封装。访问者模式要求访问者对象访问者并调用每 一个节点对象的操作,这隐含了一个对所有节点对象的要求:它 们必须暴露一些自己的

3、操作和内部状态。不然,访问者的访问者 就变得没有意义。由于访问者对象自己会积存访问者操作所需的 状态,从而使这些状态不再存储在节点对象中,这也是破坏封装 的。4. 实验总结结合实验了解访问者模式,了解什么情况下使用访问者模式1、倾斜的扩展性访问者模式仅当在被访问的类结构非常稳定的情况下使用。 换言之,系统很少出现需要加入新节点的情况。访问者模式同意在节点中加入新的方法,相应的仅仅需要在 一个新的访问者类加入此方法,而不需要在每一个访问者类中都 加入此方法。显然,访问者模式提供了倾斜的可扩展设计:方法集合的可 扩展性和类集合的不可扩展性。 换言之,如果系统的数据结构 是频繁变化的,则不适合使用访

4、问者模式。 2、“开闭”原则 和对变化的封装面向对象的设计原则只最重要的便是所谓的“开闭”原则。 一个软件系统的设计应当尽量做到对扩展开放,对修改关闭。达 到这个原则的途径就是遵循“对变化的封装”的原则。即在进行 软件系统的设计时,应当设法找出一个软件系统中会变化的部分, 将之封装起来。HotelGUI -mdtr TourMeditor+reserveRoom() +checkIn() +checkOut()+notifyirline() +notifyTour() +disply()TourGUI -mdtr TourMeditor+reserveRoom() +checkIn() +ch

5、eckOut()+notifyirline() +notifyTour() +disply()BusinessMeditorhotelGui: HotelGUI; irlineGui: irlineGUI; tourGui: TourGUI+registerHotelGUI(HotelGUI hg)+registerirlineGUI(irlineGUI g +registerTourGUI(TourGUItg) +updtellGuis(String text)irlineGUI -mdtr TourMeditor+reserveRoom() +checkIn() +checkOut() +

6、notifyirline() +notifyTour() +disply()很多的系统可以按照算法和数据结构分开,也就是说一些对 象含有算法,而另一些对象含有数据,接受算法的操作。如果这 样的系统有比较稳定的数据结构,又有易于变化的算法的话,使 用访问者没收就是比较合适的。因为访问者没收使得算法操作的 增加变得容易。反过来,如果一个系统的数据结构对象易于变化,经常要有 新的数据对象增加进来的话,就不适合使用访问者没收。因为在 访问者没收中增加新的节点很困难,要涉及到在抽象访问者和所 有的具体访问者中增加新的方法。TouriststoreGUI 代码:pckge com.shixin5.xing

7、;import jv.wt.event.*;import jv.wt.*;import jvx.swing.*;import jvx.swing.BorderFctory;import jvx.swing.border.Border;import jv.util.rryList;import jv.util.Itertor;public clss TouriststoreGUI extends JFrme privte JSplitPne bigSplitPne;privte JScrollPne showInfoPne;privte JPnel btnPnel;privte JEditorP

8、ne editorPne;privte JComboBox ntionlity;privte JLbel lblNme, lblID, ntion;privte JTextField nmeText, iDText;privte String cusNme;privte String cusID;privte String cusNtion;privte JTextre disply;privte Dimension size = new Dimension(600, 210); privte sttic int divider = 370;public sttic finl String T

9、OUR = tour;public sttic finl String SUBMIT = Submit; public sttic finl String EXIT = Exit;privte BusinessMeditor bMeditor;privte rryList(); cndidteCusNmes= new rryList(); bMeditor.registerTourGUI(this); privte void setUpChoicePnel() nmeText = new JTextField(20); iDText = new JTextField(20); ntionlit

10、y = new JComboBox(); ntionlity.ddItem(Chin); ntionlity.ddItem( US); ntionlity.ddItem(Englnd); ntionlity.ddItem( Frnce); ntionlity.ddItem(Germny); ntionlity.ddItem( Russi); ntionlity.ddItem(Jpn); ntionlity.ddItem( Kore); lblNme = new JLbel(Customer Nme:); lblID = new JLbel(Customer ID:); ntion = new

11、JLbel(Ntionlity:); /Crete the open buttonJButton submitBtn = new JButton(SUBMIT); submitBtn.setMnemonic(KeyEvent.VK_S); JButton exitButton = new JButton(EXIT); exitButton.setMnemonic(KeyEvent.VK_X); ButtonListener btnListener = new ButtonListener(); / dd ction ListenersubmitBtn.ddctionListener(btnLi

12、stener);exitButton.ddctionListener(btnListener); btnPnel = new JPnel();/GridBgLyout gridbg = new GridBgLyout(); btnPnel.setLyout(gridbg); GridBgConstrints gbc = new GridBgConstrints(); btnPnel.dd(lblNme);btnPnel.dd(nmeText); btnPnel.dd(lblID); btnPnel.dd(iDText);btnPnel.dd(ntion);btnPnel.dd(ntionlit

13、y); btnPnel.dd(submitBtn); btnPnel.dd(exitButton);gbc.insets.top = 5;gbc.insets.bottom = 5; gbc.insets.left = 5;gbc.insets.right = 5;gbc.gridx = 0;gbc.gridy = 0;gridbg.setConstrints(lblNme, gbc); gbc.gridx = 1; gbc.gridy = 0;gridbg.setConstrints(nmeText, gbc); gbc.gridx = 0; gbc.gridy = 1;gridbg.set

14、Constrints(lblID, gbc); gbc.gridx = 1; gbc.gridy = 1;gridbg.setConstrints(iDText, gbc); gbc.gridx = 0; gbc.gridy = 2;gridbg.setConstrints(ntion, gbc); gbc.gridx = 1;gbc.gridy = 2; gridbg.setConstrints(ntionlity, gbc); gbc.insets.left = 2;gbc.insets.right = 2; gbc.insets.top = 15;gbc.gridx = 0;gbc.gr

15、idy = 5; gridbg.setConstrints(submitBtn, gbc); gbc.nchor = GridBgConstrints.WEST;gbc.gridx = 1;gbc.gridy = 5; gridbg.setConstrints(exitButton, gbc);/privte void setUpScrollPnes() Border risedbevelnewBorderFctory.creteRisedBevelBorder(); editorPne = new JEditorPne(); disply = new JTextre(15, 15); sho

16、wInfoPne = new JScrollPne(disply); bigSplitPne =JSplitPne(JSplitPne.HORIZONTL_SPLIT, btnPnel,showInfoPne);bigSplitPne.setDividerLoction(divider); getContentPne().dd(bigSplitPne); setSize(size);setVisible(true);public void setCusNme() cusNme = nmeText.getText();public void setCusID()cusID = iDText.ge

17、tText();public void setCusNtion()cusNtion = (String)ntionlity.getSelectedItem(); public String getCusNme() return cusNme; public String getCusID() return cusID;public String getCusNtion()return cusNtion;public void ddCustomer(String cus) cusNmes.dd(cus);public void ddCndidteCustomer(String cus) cndi

18、dteCusNmes.dd(cus);public void displyInfoToScreen(String txt) disply.ppend(txt);public void writeReservedCusToDB()String s;Itertor e = cusNmes.itertor(); while (e.hsNext() s = (String) e.next();/try to write dt to DBpublic void writeCndidteCusToDB()String s;Itertor e = cusNmes.itertor(); while (e.hs

19、Next() s = (String) e.next();/try to write dt to DBclss ButtonListener implements ctionListener public void ctionPerformed(ctionEvent e) if (e.getctionCommnd().equls(EXIT) System.exit(1);if (e.getctionCommnd().equls(SUBMIT) setCusNme();setCusID(); setCusNtion();String nm = getCusNme();String id = ge

20、tCusID();String n = getCusNtion();displyInfoToScreen(n Tour reserved:n + nm); displyInfoToScreen(n + id ); displyInfoToScreen(n + n );String hotelCus = n nCustomer reserved Tour line: ;String cusInfo = hotelCus+n Nme: + nm + n ID: + id + n Ntionlity: + n;ddCustomer(cusInfo); bMeditor.ddllCndidteCus(TOUR,cusInfo); bMeditor.updteLlGuis(TOUR, cusInfo);

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!