版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
教务系统实验目的:学习工厂模式;掌握简单工厂模式的用法,以及其优缺点;掌握抽象工厂模式的用法,以及其优缺点。实验内容:假设我们开发一个教务管理系统,现在教务处已经购买了Oracle数据库的2年使用权,且数据库中有大量数据,不能短时间内进行数据库迁移。教务处提出一个要求,希望我们的系统现在可以支持Oracle,但在他们需要的时候,增加支持MySql、SQLServer的功能,请用简单工厂模式实现这一需求。(提示:具体代码可以数据读取写入工作抽象为一行命令行输出,但是核心的类关系必须给出。)请用抽象工厂模式实现出以上需求。简单工厂优点:工厂方法包含从一个类的结构中选择初始类的业务逻辑。客户类不直接创建产品类的对象。客户类只作为对象的消费者。简单工厂方法模式实现了责任分离。客户类不负有创建类的对象的责任,因此如果有新产品子类加入,不必修改已有的客户类代码。缺点:简单工厂方法模式不符合开闭原则。简单工厂类只能是一个单独的类,而不能成为一个层次的类抽象工厂优点:1、具体产品从客户代码中被分离出来2、容易改变产品的系列3、将一个系列的产品族统一到一起创建缺点:在产品族中扩展新的产品是很困难的,它需要修改抽象工厂的接口类图实验总结对于简单工厂和抽象工厂的学习有了初步的认识,在此学习中基本了解了什么情况下使用简单工厂和抽象工厂。简单工厂:1、工厂类负责创建的对象比较少;2、客户只知道传入工厂类的参数,对于如何创建对象(逻辑)不关心;3、由于简单工厂很容易违反高内聚责任分配原则,因此一般只在很简单的情况下应用。抽象工厂:1、一个系统不应当依赖于产品类实例如何被创建、组合和表达的细节,这对于所有形态的工厂模式都是重要的。2、这个系统有多于一个的产品族,而系统只消费其中某一产品族。3、同属于同一个产品族的产品是在一起使用的,这一约束必须在系统的设计中体现出来。4、系统提供一个产品类的库,所有的产品以同样的接口出现,从而使客户端不依赖于实现。网络连接实验目的:学习单例模式;掌握单例模式的用法,以及其优缺点;实验内容:单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。根据下面的UML图,完成相关的代码,要求为:成功运行所给代码;运用线程安全的单例模式重新设计软件框架;用代码完成你的设计。JFrameJFrameClientGUI-objLogon:LogonGUI-issueWarning()+actionPerformed(ActionEvente)JFrameSingleLogonGUI-instance:SingleLogonGUI;+getInstance():SingleLogonGUI-isValideCustomer:boolean-issueWarning()-issueSuccess()+actionPerformed(ActionEvente)3.单例模式单例模式:单例模式作为对象的一种创建模式,它的作用是确保某一个类在整个系统中只有一个实例,而且自行实例化并向整个系统提供这个实例。其特点:1、单例类只能有一个实例2、单例类必须自己创建自己唯一的实例3、单例类必须给所有其他对象提供这一实例优点:1、实例控制单例模式会阻止其他对象实例化其自己的单例对象的副本,从而确保所有对象都访问唯一实例。2、灵活性因为类控制了实例化过程,所以类可以灵活更改实例化过程。缺点:1、开销虽然数量很少,但如果每次对象请求引用时都要检查是否存在类的实例,将仍然需要一些开销。可以通过使用静态初始化解决此问题。2、可能的开发混淆使用单例对象(尤其在类库中定义的对象)时,开发人员必须记住自己不能使用new关键字实例化对象。因为可能无法访问库源代码,因此应用程序开发人员可能会意外发现自己无法直接实例化此类。3、对象生存期不能解决删除单个对象的问题。在提供内存管理的语言中,只有单例类能够导致实例被取消分配,因为它包含对该实例的私有引用。在某些语言中,其他类可以删除对象实例,但这样会导致单例类中出现悬浮引用。运行图示:5.相关代码:ClientUI.javaimportjava.awt.*;importjava.awt.event.*;importjavax.swing.*;publicclassClientUIextendsJFrame{privatestaticfinalStringCONNECT="CreateConnection";privatestaticfinalStringEXIT="Exit";privateJTextFieldtxtInstruction;privateSingleLogonGUIobjLogon=null;publicClientUI(){super("ClientUI-SingletonPattern");JButtonbtnConnect=newJButton(CONNECT);JButtonbtnExit=newJButton(EXIT);btnConnect.setMnemonic(KeyEvent.VK_S);btnExit.setMnemonic(KeyEvent.VK_X);ButtonHandlervf=newButtonHandler();btnConnect.addActionListener(vf);btnExit.addActionListener(vf);JPanelbuttonPanel=newJPanel();buttonPanel.setBackground(Color.green);buttonPanel.add(btnConnect);buttonPanel.add(btnExit);txtInstruction=newJTextField("Clicktogetaconnection");txtInstruction.setBackground(Color.green);ContainercontentPane=getContentPane();contentPane.setLayout(newBorderLayout());contentPane.add(buttonPanel,"South");contentPane.add(txtInstruction,"Center");setSize(320,120);setVisible(true);}privatevoidissueWarning(){txtInstruction.setText("Error.Youcannotstartasecondconnection."); }classButtonHandlerimplementsActionListener{publicvoidactionPerformed(ActionEvente){if(e.getActionCommand().equals(EXIT)){System.exit(1);}elseif(e.getActionCommand().equals(CONNECT)){ if(objLogon==null) objLogon=SingleLogonGUI.getInstance(); else issueWarning();}}}publicstaticvoidmain(String[]args){ ClientUIconnection=newClientUI();}}SingleLogonGUI.javaimportjava.awt.*;importjava.awt.event.*;importjavax.swing.*;publicclassSingleLogonGUIextendsJFrame{publicstaticfinalStringLOGON="LogOn";publicstaticfinalStringEXIT="Exit";privateStringUSERNM="mikesun";privateStringPASSWD="opensesame";privateJTextFieldtxtUser;privateJTextFieldtxtPassWord;privatestaticSingleLogonGUIinstance=null;privateJTextFieldtxtInstruction;privateSingleLogonGUI(){ super("SingleLogonGUI-Singleton"); initializeGUI();}publicstaticSingleLogonGUIgetInstance(){ if(instance==null) instance=newSingleLogonGUI(); returninstance;}publicvoidinitializeGUI(){JLabellblUsrName=newJLabel("UserName");JLabellblPassWord=newJLabel("Password");txtUser=newJTextField(USERNM);txtPassWord=newJTextField(PASSWD);JButtonbtnLogon=newJButton(LOGON);btnLogon.setMnemonic(KeyEvent.VK_S);JButtonbtnExit=newJButton(EXIT);btnExit.setMnemonic(KeyEvent.VK_X);ButtonHandlervf=newButtonHandler();btnLogon.addActionListener(vf);btnExit.addActionListener(vf);JPanelbuttonPanel=newJPanel();GridBagLayoutgridbag=newGridBagLayout();buttonPanel.setLayout(gridbag);GridBagConstraintsgbc=newGridBagConstraints();buttonPanel.add(lblUsrName);buttonPanel.add(txtUser);buttonPanel.add(lblPassWord);buttonPanel.add(txtPassWord);buttonPanel.add(btnLogon);buttonPanel.add(btnExit);gbc.insets.top=5;gbc.insets.bottom=5;gbc.insets.left=5;gbc.insets.right=5;gbc.gridx=0;gbc.gridy=0;gridbag.setConstraints(lblUsrName,gbc);gbc.anchor=GridBagConstraints.WEST;gbc.gridx=1;gbc.gridy=0;gridbag.setConstraints(txtUser,gbc);gbc.gridx=0; gbc.gridy=1; gridbag.setConstraints(lblPassWord,gbc); gbc.anchor=GridBagConstraints.WEST; gbc.gridx=1; gbc.gridy=1;gridbag.setConstraints(txtPassWord,gbc);gbc.anchor=GridBagConstraints.EAST;gbc.insets.left=2;gbc.insets.right=2;gbc.insets.top=40;gbc.gridx=0;gbc.gridy=6;gridbag.setConstraints(btnLogon,gbc);gbc.anchor=GridBagConstraints.WEST;gbc.gridx=1;gbc.gridy=6;gridbag.setConstraints(btnExit,gbc);ContainercontentPane=getContentPane();contentPane.add(buttonPanel,BorderLayout.CENTER);txtInstruction=newJTextField();txtInstruction.setBackground(Color.pink);contentPane.add(txtInstruction,BorderLayout.NORTH);setSize(320,200);setVisible(true);}publicbooleanisValideCustomer(){ Stringusr=txtUser.getText(); Stringpwd=txtPassWord.getText(); if(usr.equals(USERNM)&&pwd.equals(PASSWD))returntrue;els
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年幼儿托班游戏教案
- 家庭厨房空调施工方案
- 2025年度个人美容美发套餐分期支付协议3篇
- 二零二五版门窗行业环保认证合作合同4篇
- 2025年校园文化墙施工合同-校园文化墙设计与施工一体化服务协议3篇
- 年度耐蚀热交换器铜合金管材产业分析报告
- 2025年度生态园林住宅区物业费预算与绿化养护合同3篇
- 2025年度汽车抵押贷款信息保密合同样本4篇
- 2025年退休人员劳务合同范本:居家养老照料服务协议5篇
- 2024苗木购销合同书
- 2025届高考语文复习:散文的结构与行文思路 课件
- 拉萨市2025届高三第一次联考(一模)语文试卷(含答案解析)
- 《保密法》培训课件
- 回收二手机免责协议书模板
- (正式版)JC∕T 60023-2024 石膏条板应用技术规程
- (权变)领导行为理论
- 2024届上海市浦东新区高三二模英语卷
- 2024年智慧工地相关知识考试试题及答案
- GB/T 8005.2-2011铝及铝合金术语第2部分:化学分析
- 不动产登记实务培训教程课件
- 不锈钢制作合同范本(3篇)
评论
0/150
提交评论