体系结构实验报告.docx
《体系结构实验报告.docx》由会员分享,可在线阅读,更多相关《体系结构实验报告.docx(16页珍藏版)》请在冰豆网上搜索。
体系结构实验报告
中南大学软件学院
软件体系结构
设计模式实验报告
学生姓名:
宋昂
所在学院:
软件学院
学生学号:
3901080115
学生班级:
软件0801
指导老师:
刘伟
完成日期:
2010-12-7
一、实验目的
熟练使用PowerDesigner和任意一种面向对象编程语言实现几种常见的设计模式,包括简单工厂模式、工厂方法模式、抽象工厂模式、单例模式和适配器模式,理解每一种设计模式的模式动机,掌握模式结构,学习如何使用代码实现这些模式,并学会分析这些模式的使用效果。
二、实验内容
使用PowerDesigner和任意一种面向对象编程语言实现简单工厂模式、工厂方法模式、抽象工厂模式、单例模式和适配器模式,包括根据实例绘制模式结构图、编写模式实例实现代码,运行并测试模式实例代码。
(1)简单工厂模式
使用简单工厂模式设计一个可以创建不同几何形状(Shape)的绘图工具类,如可创建圆形(Circle)、方形(Rectangle)和三角形(Triangle)对象,每个几何图形都要有绘制draw()和擦除erase()两个方法,要求在绘制不支持的几何图形时,提示一个UnsupportedShapeException,绘制类图并编程实现。
(2)简单工厂模式
使用简单工厂模式模拟女娲(Nvwa)造人(Person),如果传入参数“M”,则返回一个Man对象,如果传入参数“W”,则返回一个Woman对象,使用任意一种面向对象编程语言实现该场景。
现需要增加一个新的Robot类,如果传入参数“R”,则返回一个Robot对象,对代码进行修改并注意女娲的变化。
(3)工厂方法模式
某系统日志记录器要求支持多种日志记录方式,如文件记录、数据库记录等,且用户可以根据要求动态选择日志记录方式,现使用工厂方法模式设计该系统。
用代码实现日志记录器实例,如果在系统中增加一个中的日志记录方式——控制台日志记录(ConsoleLog),绘制类图并修改代码,注意增加新日志记录方式过程中原有代码的变化。
(4)工厂方法模式
现需要设计一个程序来读取多种不同类型的图片格式,针对每一种图片格式都设计一个图片读取器(ImageReader),如GIF图片读取器(GifReader)用于读取GIF格式的图片、JPG图片读取器(JpgReader)用于读取JPG格式的图片。
图片读取器对象通过图片读取器工厂ImageReaderFactory来创建,ImageReaderFactory是一个抽象类,用于定义创建图片读取器的工厂方法,其子类GifReaderFactory和JpgReaderFactory用于创建具体的图片读取器对象。
使用工厂方法模式实现该程序的设计。
(5)抽象工厂模式
某系统为了改进数据库操作的性能,自定义数据库连接对象Connection和语句对象Statement,可针对不同类型的数据库提供不同的连接对象和语句对象,如提供Oracle或SQLServer专用连接类和语句类,而且用户可以通过配置文件等方式根据实际需要动态更换系统数据库。
使用抽象工厂模式设计该系统。
用代码模拟实现数据库操作工厂实例,要求可以通过配置文件改变数据库类型。
(6)抽象工厂模式
计算机包含内存(RAM)、CPU等硬件设备,根据下面的“产品等级结构-产品族”示意图,使用抽象工厂模式实现计算机设备创建过程并绘制相应的类图。
(7)单例模式
使用单例模式的思想实现多例模式,确保系统中某个类的对象只能存在有限个,如两个或三个,设计并编写代码实现一个多例类。
(8)单例模式
使用单例模式设计一个多文档窗口(注:
在JavaAWT/Swing开发中可使用JDesktopPane和JInternalFrame来实现),要求在主窗体中某个内部子窗体只能实例化一次,即只能弹出一个相同的子窗体,如下图所示:
(注:
用C#或C++实现类似功能也可以)
(9)适配器模式
现有一个接口DataOperation定义了排序方法sort(int[])和查找方法search(int[],int),已知类QuickSort的quickSort(int[])方法实现了快速排序算法,类BinarySearch的binarySearch(int[],int)方法实现了二分查找算法。
现使用适配器模式设计一个系统,在不修改源代码的情况下将类QuickSort和类BinarySearch的方法适配到DataOperation接口中。
绘制类图并编程实现。
(要求实现快速排序和二分查找)
(10)适配器模式
使用任意一种面向对象编程语言实现一个双向适配器实例,使得猫可以学狗叫,狗可以学猫抓老鼠。
绘制相应类图并使用代码编程模拟。
三、实验要求
1.正确无误绘制简单工厂模式、工厂方法模式、抽象工厂模式、单例模式和适配器模式实例的模式结构图;
2.使用任意一种面向对象编程语言实现简单工厂模式、工厂方法模式、抽象工厂模式、单例模式和适配器模式实例,代码运行正确无误。
四、实验步骤
1.熟悉PowerDesigner15的常用功能;
2.使用PowerDesigner绘制简单工厂模式实例结构图并用面向对象编程语言实现该模式实例;
3.使用PowerDesigner绘制工厂方法模式实例结构图并用面向对象编程语言实现该模式实例;
4.使用PowerDesigner绘制抽象工厂模式实例结构图并用面向对象编程语言实现该模式实例;
5.使用PowerDesigner绘制单例模式实例结构图并用面向对象编程语言实现该模式实例;
6.使用PowerDesigner绘制适配器模式结构图并用面向对象编程语言实现该模式。
五、实验结果
(1)简单工厂模式1:
类图:
结果:
(2)简单工厂模式2:
类图:
结果:
(3)工厂方法模式1
类图:
结果:
(4)工厂方法模式2
类图:
结果:
(5)抽象工厂模式1
类图:
结果:
(6)抽象工厂模式2
类图:
结果:
(7)单例模式1
类图:
结果:
(8)单例模式1
类图:
结果:
(9)适配器模式1
类图:
结果:
(10)适配器模式2
类图:
结果:
六、实验总结
通过一段时间的对设计模式的学习和练习,我深刻的意识到了一个好的软件往往是设计模式巧妙运用的结果。
要学好设计模式,就必须得彻底理解设计模式,要能够看懂设计模式中的类图,如果要是设计模式中的类图都看不懂,那学好设计模式只是天方夜谭了。
从开始学习设计模式到现在我们大概已经学了10种左右的设计模式了,每一种都有着它独特的优点,但是事情往往都是有两面性的,它们也存在着缺点,怎么去用好设计模式对我们来说是一门学问,我们有必要花时间和精力去学好它。