版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验五、计算机配件1.实验目的S学习访问者模式;掌握访问者模式的用法,以及其优缺点;2.实验内容:2.实验内容:下图示所给代码运行的效果,按照所给的代码,类图和要求,完成对应TounststoreGUI类的设计和编程。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•访问者模式的优缺点1、 优点访问者模式使得增加新的操作变得很容易。如果一些操作依赖于一个复杂得结构对彖的话,那么一般而言,增加新的操作会很复杂。而使用访问者模式,增加新的操作就意味着增加一个新的访问者类,因此,变的很容易。访问者模式将有关的行为集中到一个访问者对彖中,而不是分散到一个个节点类中。访问者模式可以跨越几个类得等级结构访问属于不同的等级结构的成员类。迭代子只能访问属于同一个类型等级结构的成员对象,而不能访问属于不同等级结构的对象。访问者模式可以做到这一点。2、 缺点增加新的节点变的很困难。每增加一个新的节点都意味着要在抽彖访问者角色中增加一个新的抽象操作,并在每一个具体访问者类中增加相应的具体操作。破坏封装。访问者模式要求访问者对彖访问者并调用每一个节点对彖的操作,这隐含了一个对所有节点对象的要求:它们必须暴露一些自己的操作和内部状态。不然,访问者的访问者就变得没有意义。由于访问者对彖自己会积累访问者操作所需的状态,从而使这些状态不再存储在节点对彖中,这也是破坏封装的。4•实验总结结合实验了解访问者模式,了解什么情况下使用访问者模式。1、 倾斜的扩展性访问者模式仅当在被访问的类结构非常稳定的情况卞使用。换言之,系统很少出现需要加入新节点的情况。访问者模式允许在节点中加入新的方法,相应的仅仅需要在一个新的访问者类加入此方法,而不需要在每一个访问者类中都加入此方法。显然,访问者模式提供了倾斜的可扩展设计:方法集合的可扩展性和类集合的不可扩展性。换言之,如果系统的数据结构是频繁变化的,则不适合使用访问者模式。2、 “开一闭”原则和对变化的封装面向对彖的设计原则只最重要的便是所谓的“开一闭”原则。一个软件系统的设计应当尽量做到对扩展开放,对修改关闭。达到这个原则的途径就是遵循“对变化的封装”的原则。即在进行软件系统的设计时,应当设法找出一个软件系统中会变化的部分,将之封装起来。很多的系统可以按照算法和数据结构分开,也就是说一些对彖含有算法,而另一些对象含有数据,接受算法的操作。如果这样的系统有比较稳定的数据结构,又有易于变化的算法的话,使用访问者没收就是比较合适的。因为访问者没收使得算法操作的增加变得容易。反过來,如果一个系统的数据结构对彖易于变化,经常要有新的数据对彖增加进来的话,就不适合使用访问者没收。因为在访问者没收中增加新的节点很困难,要涉及到在抽彖访问者和所有的具体访问者中增加新的方法。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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 消防演习总结存在的问题及整改措施
- 乡镇快递驿站消防安全指南(2025版)
- 2026年全科医学科转岗培训卫生法规试题及答案
- 血小板输注指征临床共识
- 果蔬原料库管理员安全操作规程
- 直播间音响调试安全操作规程
- 《儿童发展问题的咨询与辅导》形考任务试题及答案
- 江苏省事业单位市场监管岗笔试模拟练习习题集带解析
- 高中化学教资面试实验重难点试卷及解析
- 2026年中级会计职称考试财务管理模拟试题解析冲刺押题
- 新版2025-2026新版部编人教版小学2二年级语文上册1(全册)教案设计合集47
- 2026年北京市密云区辅警人员招聘考试真题试卷(含完-整答案解析)
- EN IEC 62477-1-2024 中文版(欧盟光伏储能变流器并网安全限值规范)深度解析
- 2026年水务行业招聘综合知识+供排水专业知识试题卷(含参考答案及解析)
- 乡镇卫生院常见病66种的临床路径及诊疗指南
- 越南新矿产资源法下中国企业投资的机遇与挑战:基于政策分析与实践探索
- 2026(青岛版新教材)数学三年级上册全册数学教学设计
- 失能老年人健康评估服务工作细则
- 2026南方基金金融科技专场校园招聘笔试历年难易错考点试卷带答案解析
- 西北工业大学附属中学2026届高三下学期第十一次适应性训练数学试卷
- 公路工程监理培训制度
评论
0/150
提交评论