软件设计模式与体系结构实验报告_第1页
软件设计模式与体系结构实验报告_第2页
软件设计模式与体系结构实验报告_第3页
软件设计模式与体系结构实验报告_第4页
软件设计模式与体系结构实验报告_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验五、计算机配件1. 实验目的: 学习访问者模式; 掌握访问者模式的用法,以及其优缺点;2. 实验内容:下图示所给代码运行的效果,按照所给的代码,类图和要求,完成对应TouriststoreGUI类的设计和编程。TouriststoreGUI输入界面:旅游公司输入客户信息:宾馆界面同步获得旅游公司输入的客户信息:机场界面同步获得旅游公司输入的客户信息:类图:HotelGUI-mdtr TourMediator +reserveRoom()+checkIn()+checkOut()+notifyAirline()+notifyTour()+display()TourGUI-mdtr TourM

2、ediator +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 TourMedia

3、tor +reserveRoom()+checkIn()+checkOut()+notifyAirline()+notifyTour()+display()3. 访问者模式的优缺点1、优点 (1)访问者模式使得增加新的操作变得很容易。如果一些操作依赖于一个复杂得结构对象的话,那么一般而言,增加新的操作会很复杂。而使用访问者模式,增加新的操作就意味着增加一个新的访问者类,因此,变的很容易。 (2)访问者模式将有关的行为集中到一个访问者对象中,而不是分散到一个个节点类中。 (3)访问者模式可以跨越几个类得等级结构访问属于不同的等级结构的成员类。迭代子只能访问属于同一个类型等级结构的成员对象,而不能

4、访问属于不同等级结构的对象。访问者模式可以做到这一点。2、缺点 (1)增加新的节点变的很困难。每增加一个新的节点都意味着要在抽象访问者角色中增加一个新的抽象操作,并在每一个具体访问者类中增加相应的具体操作。 (2)破坏封装。访问者模式要求访问者对象访问者并调用每一个节点对象的操作,这隐含了一个对所有节点对象的要求:它们必须暴露一些自己的操作和内部状态。不然,访问者的访问者就变得没有意义。由于访问者对象自己会积累访问者操作所需的状态,从而使这些状态不再存储在节点对象中,这也是破坏封装的。4.实验总结结合实验了解访问者模式,了解什么情况下使用访问者模式。1、倾斜的扩展性 访问者模式仅当在被访问的类

5、结构非常稳定的情况下使用。换言之,系统很少出现需要加入新节点的情况。 访问者模式允许在节点中加入新的方法,相应的仅仅需要在一个新的访问者类加入此方法,而不需要在每一个访问者类中都加入此方法。 显然,访问者模式提供了倾斜的可扩展设计:方法集合的可扩展性和类集合的不可扩展性。 换言之,如果系统的数据结构是频繁变化的,则不适合使用访问者模式。2、“开闭”原则和对变化的封装 面向对象的设计原则只最重要的便是所谓的“开闭”原则。一个软件系统的设计应当尽量做到对扩展开放,对修改关闭。达到这个原则的途径就是遵循“对变化的封装”的原则。即在进行软件系统的设计时,应当设法找出一个软件系统中会变化的部分,将之封装

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

7、wt.*;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

8、 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 = 37

9、0; 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- T

10、ouriststoreGUI ); 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(); nat

11、ionality.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:);

12、 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

13、.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); btn

14、Panel.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 =

15、0; gridbag.setConstraints(nameText, gbc); gbc.gridx = 0; gbc.gridy = 1; gridbag.setConstraints(lblID, 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(natio

16、nality, gbc); gbc.insets.left = 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); /- private void setUpScrollPanes() Border r

17、aisedbevel = BorderFactory.createRaisedBevelBorder(); editorPane = new JEditorPane(); display = new JTextArea(15, 15); showInfoPane = new JScrollPane(display); bigSplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, btnPanel,showInfoPane); bigSplitPane.setDividerLocation(divider); getContentPane(

18、).add(bigSplitPane); setSize(size); setVisible(true); public void setCusName() cusName = nameText.getText(); public void setCusID() cusID = iDText.getText(); public void setCusNation() cusNation = (String)nationality.getSelectedItem(); public String getCusName() return cusName; public String getCusI

19、D() return cusID; public String getCusNation() return cusNation; public void addCustomer(String cus) cusNames.add(cus); public void addCandidateCustomer(String cus) candidateCusNames.add(cus); public void displayInfoToScreen(String txt) display.append(txt); public void writeReservedCusToDB() String s; Iterator e = cusNames.iterator(); while (e.hasNext() s = (String) e.next(); /try to write data to DB public void writeCandidateCusToDB() String s; Iterator e = cusNames.iterator(); while (e.hasNext() s = (String) e.next(); /try to writ

温馨提示

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

最新文档

评论

0/150

提交评论