资源预览内容
第1页 / 共11页
第2页 / 共11页
第3页 / 共11页
第4页 / 共11页
第5页 / 共11页
第6页 / 共11页
第7页 / 共11页
第8页 / 共11页
第9页 / 共11页
第10页 / 共11页
亲,该文档总共11页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
实验五、计算机配件1. 实验目的: 学习访问者模式; 掌握访问者模式的用法,以及其优缺点;2. 实验内容:下图示所给代码运行的效果,按照所给的代码,类图和要求,完成对应TouriststoreGUI类的设计和编程。TouriststoreGUI输入界面:旅游公司输入客户信息:宾馆界面同步获得旅游公司输入的客户信息:机场界面同步获得旅游公司输入的客户信息:类图:HotelGUI-mdtr TourMediator +reserveRoom()+checkIn()+checkOut()+notifyAirline()+notifyTour()+display()TourGUI-mdtr TourMediator +reserveRoom()+checkIn()+checkOut()+notifyAirline()+notifyTour()+display()BusinessMediator hotelGui: HotelGUI;airlineGui: AirlineGUI;tourGui: TourGUI+registerHotelGUI(HotelGUI hg)+registerAirlineGUI(AirlineGUI ag+registerTourGUI(TourGUI tg)+updateAllGuis(String text)AirlineGUI-mdtr TourMediator +reserveRoom()+checkIn()+checkOut()+notifyAirline()+notifyTour()+display()3. 访问者模式的优缺点1、优点 (1)访问者模式使得增加新的操作变得很容易。如果一些操作依赖于一个复杂得结构对象的话,那么一般而言,增加新的操作会很复杂。而使用访问者模式,增加新的操作就意味着增加一个新的访问者类,因此,变的很容易。 (2)访问者模式将有关的行为集中到一个访问者对象中,而不是分散到一个个节点类中。 (3)访问者模式可以跨越几个类得等级结构访问属于不同的等级结构的成员类。迭代子只能访问属于同一个类型等级结构的成员对象,而不能访问属于不同等级结构的对象。访问者模式可以做到这一点。2、缺点 (1)增加新的节点变的很困难。每增加一个新的节点都意味着要在抽象访问者角色中增加一个新的抽象操作,并在每一个具体访问者类中增加相应的具体操作。 (2)破坏封装。访问者模式要求访问者对象访问者并调用每一个节点对象的操作,这隐含了一个对所有节点对象的要求:它们必须暴露一些自己的操作和内部状态。不然,访问者的访问者就变得没有意义。由于访问者对象自己会积累访问者操作所需的状态,从而使这些状态不再存储在节点对象中,这也是破坏封装的。4.实验总结结合实验了解访问者模式,了解什么情况下使用访问者模式。1、倾斜的扩展性 访问者模式仅当在被访问的类结构非常稳定的情况下使用。换言之,系统很少出现需要加入新节点的情况。 访问者模式允许在节点中加入新的方法,相应的仅仅需要在一个新的访问者类加入此方法,而不需要在每一个访问者类中都加入此方法。 显然,访问者模式提供了倾斜的可扩展设计:方法集合的可扩展性和类集合的不可扩展性。 换言之,如果系统的数据结构是频繁变化的,则不适合使用访问者模式。2、“开闭”原则和对变化的封装 面向对象的设计原则只最重要的便是所谓的“开闭”原则。一个软件系统的设计应当尽量做到对扩展开放,对修改关闭。达到这个原则的途径就是遵循“对变化的封装”的原则。即在进行软件系统的设计时,应当设法找出一个软件系统中会变化的部分,将之封装起来。 很多的系统可以按照算法和数据结构分开,也就是说一些对象含有算法,而另一些对象含有数据,接受算法的操作。如果这样的系统有比较稳定的数据结构,又有易于变化的算法的话,使用访问者没收就是比较合适的。因为访问者没收使得算法操作的增加变得容易。 反过来,如果一个系统的数据结构对象易于变化,经常要有新的数据对象增加进来的话,就不适合使用访问者没收。因为在访问者没收中增加新的节点很困难,要涉及到在抽象访问者和所有的具体访问者中增加新的方法。TouriststoreGUI代码:package com.shixian5.xing;import java.awt.event.*;import java.awt.*;import javax.swing.*;import javax.swing.BorderFactory;import javax.swing.border.Border;import java.util.ArrayList;import java.util.Iterator;public class TouriststoreGUI extends JFrame private JSplitPane bigSplitPane; private JScrollPane showInfoPane; private JPanel btnPanel; private JEditorPane editorPane; private JComboBox nationality; private JLabel lblName, lblID, nation; private JTextField nameText, iDText; private String cusName; private String cusID; private String cusNation; private JTextArea display; private Dimension size = new Dimension(600, 210); private static int divider = 370; public static final String TOUR = tour; public static final String SUBMIT = Submit; public static final String EXIT = Exit; private BusinessMediator bMediator; private ArrayList cusNames; private ArrayList candidateCusNames; public TouriststoreGUI(BusinessMediator bMdtr) super(Mediator Pattern- TouriststoreGUI ); bMediator = bMdtr; setUpChoicePanel(); setUpScrollPanes(); cusNames = new ArrayList(); candidateCusNames= new ArrayList(); bMediator.registerTourGUI(this); private void setUpChoicePanel() nameText = new JTextField(20); iDText = new JTextField(20); nationality = new JComboBox(); nationality.addItem(China); nationality.addItem( USA); nationality.addItem(England); nationality.addItem( France); nationality.addItem(Germany); nationality.addItem( Russia); nationality.addItem(Japan); nationality.addItem( Korea); lblName = new JLabel(Customer Name:); lblID = new JLabel(Customer ID:); nation = new JLabel(Nationality:); /Create the open button JButton submitBtn = new JButton(SUBMIT); submitBtn.setMnemonic(KeyEvent.VK_S); JButton exitButton = new JButton(EXIT); exitButton.setMnemonic(KeyEvent.VK_X); ButtonListener btnListener = new ButtonListener(); / add action Listener submitBtn.addActionListener(btnListener); exitButton.addActionListener(btnListener); btnPanel = new JPanel(); /- GridBagLayout gridbag = new GridBagLayout(); btnPanel.setLayout(gridbag); GridBagConstraints gbc = new GridBagConstraints(); btnPanel.add(lblName); btnPanel.add(nameText); btnPanel.add(lblID); 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.left = 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.setCo
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号