ImageVerifierCode 换一换
格式:DOCX , 页数:20 ,大小:161.94KB ,
资源ID:6598442      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6598442.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(设计模式实验四.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

设计模式实验四.docx

1、设计模式实验四实验4结构型设计模式实验实验学时: 2每组人数: 1实验类型:3(1 :基础性2:综合性3:设计性4 :研究性)实验要求:1(1 :必修2:选修3:其它)实验类别:3(1 :基础2:专业基础3:专业4:其它)、实验目的熟练使用 PowerDesigner和任意一种面向对象编程语言实现几种常见的结构型设计模 式,包括适配器模式、组合模式和外观模式, 理解每一种设计模式的模式动机,掌握模式结构,学习如何使用代码实现这些模式。二、实验内容1.现有一个接口 DataOperation 定义了排序方法 sort(int)和查找方法 search(int, int), 已知类 QuickSo

2、rt的quickSort(int)方法实现了快速排序算法,类 BinarySearch的binarySearch(int, int)方法实现了二分查找算法。试使用适配器模式设计一个系统,在不修 改源代码的情况下将类 QuickSort和类BinarySearch的方法适配到 DataOperation接口中。绘制类图并编程实现。(要求实现快速排序和二分查找,使用对象适配器实现)2.Windows Media Player和RealPlayer是两种常用的媒体播放器,它们的 API结构和调用方法存在区别。现在你的应用程序需要支持这两种播放器 API,而且在将来可能还需要支持新的媒体播放器,请问如

3、何设计该应用程序?绘制类图并编程模拟实现。3.使用组合模式设计一个杀毒软件 (AntiVirus)的框架,该软件既可以对某个文件夹(Folder)杀毒,也可以对某个指定的文件 (File)进行杀毒,文件种类包括文本文件 TextFile、图片文件ImageFile、视频文件 VideoFile。绘制类图并编程模拟实现。4.某教育机构组织结构如下图所示:在该教育机构的 OA 系统中可以给各级办公室下发公文, 试采用组合模式设计该机构的 组织结构,绘制相应的类图并编程模拟实现,在客户端代码中模拟下发公文。5.某软件公司为新开发的智能手机控制与管理软件提供了一键备份功能,通过该功能 可以将原本存储在

4、手机中的通信录、 短信、 照片、歌曲等资料一次性全部拷贝到移动存储介 质(例如 MMC 卡或 SD 卡)中。在实现过程中需要与多个已有的类进行交互,例如通讯录 管理类、 短信管理类等, 为了降低系统的耦合度, 试使用外观模式来设计并编程模拟实现该 一键备份功能。6.某信息系统需要提供一个数据处理和报表显示模块,该模块可以读取不同类型的文 件中的数据并将数据转换成 XML 格式,然后对数据进行统计分析,最后以报表方式来显示 数据。 由于该过程需要涉及到多个类, 试使用外观模式设计该数据处理和报表显示模块。 虑到有些文件本身已经是 XML 格式,无须进行格式转换,为了让系统具有更好的扩展性, 在系

5、统设计中可以引入抽象外观类。三、实验要求1.结合实例,正确无误地绘制适配器模式、组合模式和外观模式的模式结构图;2.使用任意一种面向对象编程语言实现适配器模式、组合模式和外观模式实例,代码 运行正确无误。四、实验步骤1. 结合实例,使用 PowerDesigner 绘制适配器模式实例结构图并用面向对象编程语言实 现该模式实例;2. 结合实例,使用 PowerDesigner 绘制适配器模式实例结构图并用面向对象编程语言实 现该模式实例;3.结合实例, 使用 PowerDesigner 绘制组合模式实例结构图并用面向对象编程语言实现 该模式实例;4.结合实例, 使用 PowerDesigner

6、绘制组合模式实例结构图并用面向对象编程语言实现 该模式实例;5.结合实例, 使用 PowerDesigner 绘制外观模式实例结构图并用面向对象编程语言实现 该模式实例;6.结合实例, 使用 PowerDesigner 绘制外观模式实例结构图并用面向对象编程语言实现 该模式实例。五、实验结果1.类图:实现代码:DataOperation .javapublic in terface DataOperati on public void sort(i nt n); public int search(i nt m, int n);Adapter.javapublic class Adapter

7、impleme nts DataOperati on private Bin arySearch bs;private QuickSort qs;public Adapter()qs = new Quicksort。;bs = new Bin arySearch();public void sort(i nt n) qs.quickSort (n);public int search(i nt m, int n) retur n bs.b in arySearch(m, n);QuickSort.javapublic class Quicksort public void quickSort(

8、i nt n) int size = n.len gth;quickSortMethod(n, 0, size - 1);public void quickSortMethod(int n, int left, int right) int q;if (left right) q = partition(n, left, right); quickSortMethod(n, left, q - 1); quickSortMethod(n, q + 1, right);public int partition(int n, int left, int right) int shaft = n l

9、eft;int temp = 0;while (left shaft) right-;while (n left shaft)left+;if (nleft = nright) right-; else temp = n left;nleft = n right;n right = temp;n left = shaft;return left;Bin arySearch.javapublic class Bin arySearch public int bin arySearch(i nt m, int n)Quicksort qs = new Quicksort。;int left = 0

10、;qs(m);int right = m.len gth;while(left n)right = middle - 1;elseleft = middle + 1;return -1;XMLUtil.javaimport javax.xml.parsers.*;import org.w3c.dom.*;import org.xml.sax.SAXExceptio n;import java.io.*;public class XMLUtil/该方法用于从XML配置文件中提取具体类类名,并返回一个实例对象public static Object getBea n()try创建DOM文档对象Do

11、cume ntBuilderFactory dFactory = Docume ntBuilderFactory .newln sta nce();Docume ntBuilder builder = dFactory .n ewDocume ntBuilder();Docume nt doc;doc = builder.parse (new File(src/c on fig.xml);获取包含类名的文本节点NodeList nl = doc.getEleme ntsByTagName(className);Node classNode=nl .item(O).getFirstChild()

12、;String cName=classNode.getNodeValue();/通过类名生成实例对象并将其返回Class c=Class.forName(cName);Object obj=c. newln sta nce();return obj; catch(Excepti on e)e.pri ntStackTrace();return nu II;Clie nt.javapublic class Clie nt public static void main(String args)in t m = 5, 4, 8, 7, 9, 2, 3, 1,0, 6;DataOperatio n

13、dataoperati on;dataoperation = (DataOperatio n)XMLUtil.getBea n();dataoperati on. sort(m);for(i nt i=0; i m.len gth; i+)System.out.pri nt(mi + );System.out.pri ntl n(n + dataoperati on. search(m, 6);2.类图:Clienta Playerrzzr 牙+ pJay fString fileName) . voidA AWMPAdapter-的np . Wi ndowsM ed i a P layer+

14、 play (String fileName) . voidWi rtdows Medi aPlayer+ play (String fileName) void实现代码:Player.javapublic in terface Player public abstract void play(String fileName);WMPAdapter.javapublic class WMPAdapter impleme nts Player private Win dowsMediaPlayer wmp;public WMPAdapter()wmp = new Win dowsMediaPla

15、yer();public void play(String fileName)wmp.play(fileName);RPAdapter.javapublic class RPAdapter impleme nts Player private RealPlayer rp;public RPAd apter()rp = new RealPlayer。;public void play(String fileName)rp.play(fileName);Win dowsMediaPlayer.javapublic class Win dowsMediaPlayer public void play

16、(String fileName)System.out.println(fileName + 用 WindowsMediaPlayer 播放);RealPlayer.javapublic class RealPlayer public void play(String fileName)System.out.println(fileName + 用 RealPlayer 播放);XMLUtil.javaimport javax.xml.parsers.*;import org.w3c.dom.*;import org.xml.sax.SAXExceptio n;import java.io.*

17、;public class XMLUtil/该方法用于从XML配置文件中提取具体类类名,并返回一个实例对象public static Object getBea n()try创建DOM文档对象Docume ntBuilderFactory dFactory = Docume ntBuilderFactory .newln sta nce();Docume ntBuilder builder = dFactory .n ewDocume ntBuilder();Docume nt doc;doc = builder.parse (new File(src/c on fig.xml);获取包含类名

18、的文本节点NodeList nl = doc.getEleme ntsByTagName(className);Node classNode=nl .item(O).getFirstChild();String cName=classNode.getNodeValue();/通过类名生成实例对象并将其返回Class c=Class.forName(cName);Object obj=c. newln sta nce();return obj;catch(Excepti on e)e.pri ntStackTrace();return nu II;Clie nt.javapublic class

19、 Clie nt public static void main(String args)Player p;p = (Player)XMLUtil.getBea n();p.play(Rush Hour);3.类图:Afcslmctf-ihatwlracij+ kNVirus “ void实现代码:AbstractFile.javapublic abstract class AbstractFile public abstract void killVirus();Folder.javaimport java.util.ArrayList;public class Folder exte nd

20、s AbstractFile private String fileName;private ArrayList fileList = new ArrayList();public void killVirus() System.out.println(” 对文件夹 ” + fileName + 杀毒);/调用文件夹内成员的杀毒方法for(Object obj:fileList)(AbstractFile)obj).killVirus();public void add(AbstractFile abFile) fileList.add(abFile);public void remove(A

21、bstractFile abFile) fileList.remove(abFile);public Folder(Stri ng fileName) this.fileName = fileName;public AbstractFile getChild(i nt n) return fileList.get (n);ImageFile.javapublic class ImageFile exte nds AbstractFile private String fileName;public void killVirus() System.out.println(” 对图像文件 ” +

22、fileName + 杀毒);public ImageFile(String fileName) this.fileName = fileName;TextFile.javapublic class TextFile exte nds AbstractFile private String fileName;public void killVirus() System.out.println(” 对文本文件 ” + fileName + 杀毒);public TextFile(String fileName) this.fileName = fileName;public class Vide

23、oFile exte nds AbstractFile private String fileName;public void killVirus() System.out.println(” 对视频文件 ” + fileName + 杀毒);public VideoFile(String fileName) this.fileName = fileName;Clie nt.javapublic class Clie nt public static void main(String args)AbstractFile file1, file2, file3;Folder folder1, f

24、older2;file1 = new ImageFile(” 风景);file2 = new TextFile(乔布斯全传);file3 = new VideoFile(尖峰时刻”);folder1 = new Folder(总文件夹);folder2 = new Folder(子文件夹);folder2.add(file1);folder2.add(file2);folder1.add(file3);folder1.add(folder2);folder1.killVirus();4.类图:实现代码:AbstractBra nch.javapublic abstract class Abst

25、ractBra nch public abstract void receiveDoc();public abstract String getName();AdOffice.javapublic class AdOffice exte nds AbstractBra nch private String name;public void receiveDoc() System.out.println(行政办公室收到文件 );public AdOffice(Stri ng name)this. name = n ame;public String getName()return n ame;E

26、dOffice.javapublic class EdOffice exte nds AbstractBra nch private String name;public void receiveDoc() System.out.println(教务办公室收到文件 ); public EdOffice(Stri ng n ame)this. name = n ame;public String getName()return n ame;Bran ch.javaimport java.util.ArrayList;public class Branch exte nds AbstractBra

27、 nch private ArrayList list;private String name;public Bran ch(Stri ng n ame) this. name = n ame;public void receiveDoc() System.out.println(name + 分部收到文件”); public AbstractBra nch getChild( int n) return list.get( n);public void add(AbstractBra nch abBra nch) list.add(abBra nch);public void remove(

28、AbstractBra nch abBra nch) list.remove(abBra nch);public String getName()return n ame;public void sen dDoc(AbstractBra nch abBra nch) System.out.println(name + 分部发送文件到+ abBranch.getName(); abBra nch.receiveDoc();Clie nt.javapublic class Clie nt public static void main(String args)AbstractBra nch ab1, ab2;Branch b1, b2, b3, b4;ab1 = new AdOffice(” 行政办公室);ab2 = new EdOffice(” 教务办公室”);b1 = new Branch(北京);b2 = new Branch(湖南);b3 = new Branch(长沙);b4 = new Branch(湘潭);b1.se ndDoc(b2);b2.se ndDoc(b3);b2.se ndDoc(b4);b4.se ndDoc(abl);b3.se ndDoc(ab2);5.类图:B0ckUpFac0fe

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1