P2 实验二 设计模式实验一Word格式.docx
《P2 实验二 设计模式实验一Word格式.docx》由会员分享,可在线阅读,更多相关《P2 实验二 设计模式实验一Word格式.docx(13页珍藏版)》请在冰豆网上搜索。
在某图形库API中提供了多种矢量图模板,用户可以基于这些矢量图创建不同的显示图形,图形库设计人员设计的初始类图如下所示:
在该图形库中,每个图形类(如Circle、Triangle等)的init()方法用于初始化所创建的图形,setColor()方法用于给图形设置边框颜色,fill()方法用于给图形设置填充颜色,setSize()方法用于设置图形的大小,display()方法用于显示图形。
客户类(Client)在使用该图形库时发现存在如下问题:
由于在创建窗口时每次只需要使用图形库中的一种图形,因此在更换图形时需要修改客户类源代码;
在图形库中增加并使用新的图形时需要修改客户类源代码;
客户类在每次使用图形对象之前需要先创建图形对象,有些图形的创建过程较为复杂,导致客户类代码冗长且难以维护。
现需要根据面向对象设计原则对该系统进行重构,要求如下:
隔离图形的创建和使用,将图形的创建过程封装在专门的类中,客户类在使用图形时无须直接创建图形对象,甚至不需要关心具体图形类类名;
客户类能够方便地更换图形或使用新增图形,无须针对具体图形类编程,符合开闭原则。
绘制重构之后的类图并说明在重构过程中所运用的面向对象设计原则。
(2)简单工厂模式
使用简单工厂模式设计一个可以创建不同几何形状(Shape)的绘图工具类,如可创建圆形(Circle)、矩形(Rectangle)和三角形(Triangle)对象,每个几何图形均具有绘制draw()和擦除erase()两个方法,要求在绘制不支持的几何图形时,抛出一个UnsupportedShapeException异常,绘制类图并编程模拟实现。
(3)简单工厂模式
使用简单工厂模式模拟女娲(Nvwa)造人(Person),如果传入参数“M”,则返回一个Man对象,如果传入参数“W”,则返回一个Woman对象,绘制类图并使用任意一种面向对象编程语言实现该场景。
现需要增加一个新的Robot类,如果传入参数“R”,则返回一个Robot对象,对代码进行修改并注意女娲的变化。
(4)工厂方法模式
某系统日志记录器要求支持多种日志记录方式,如文件记录(FileLog)、数据库记录(DatabaseLog)等,且用户可以根据要求动态选择日志记录方式,现使用工厂方法模式设计该系统如下图所示,用代码实现日志记录器实例,如果在系统中增加一个中的日志记录方式——控制台日志记录(ConsoleLog),绘制类图并修改代码,注意增加新日志记录方式过程中原有系统的变化。
(5)工厂方法模式
现需要设计一个程序来读取多种不同类型的图片格式,针对每一种图片格式都设计一个图片读取器(ImageReader),如GIF图片读取器(GifReader)用于读取GIF格式的图片、JPG图片读取器(JpgReader)用于读取JPG格式的图片。
图片读取器对象通过图片读取器工厂ImageReaderFactory来创建,ImageReaderFactory是一个抽象类,用于定义创建图片读取器的工厂方法,其子类GifReaderFactory和JpgReaderFactory用于创建具体的图片读取器对象。
使用工厂方法模式实现该程序的设计,绘制类图并编程模拟实现。
(6)抽象工厂模式
某系统为了改进数据库操作的性能,自定义数据库连接对象Connection和语句对象Statement,可针对不同类型的数据库提供不同的连接对象和语句对象,如提供Oracle或MySQL专用连接类和语句类,而且用户可以通过配置文件等方式根据实际需要动态更换系统数据库。
使用抽象工厂模式设计该系统,类图如下所示,用代码模拟实现数据库操作工厂实例。
(7)抽象工厂模式
计算机包含内存(RAM)、CPU等硬件设备,根据下面的“产品等级结构-产品族”示意图,使用抽象工厂模式模拟实现计算机设备创建过程并绘制相应的类图。
(8)单例模式
使用单例模式的思想实现多例模式,确保系统中某个类的对象只能存在有限个,如两个或三个,设计并编写代码实现一个多例类。
(9)单例模式
使用单例模式设计一个多文档窗口(注:
在JavaAWT/Swing开发中可使用JDesktopPane和JInternalFrame来实现),要求在主窗体中某个内部子窗体只能实例化一次,即只能弹出一个相同的子窗体,如下图所示,编程实现该功能。
(注:
用C#或C++实现类似功能也可以)
(10)适配器模式
现有一个接口DataOperation定义了排序方法sort(int[])和查找方法search(int[],int),已知类QuickSort的quickSort(int[])方法实现了快速排序算法,类BinarySearch的binarySearch(int[],int)方法实现了二分查找算法。
现使用适配器模式设计一个系统,在不修改源代码的情况下将类QuickSort和类BinarySearch的方法适配到DataOperation接口中。
绘制类图并编程实现。
(要求实现快速排序和二分查找)
(11)适配器模式
使用任意一种面向对象编程语言实现一个双向适配器实例,使得猫(Cat)可以学狗(Dog)叫,狗可以学猫抓老鼠。
绘制相应类图并使用代码编程模拟。
三、实验要求
1.选择合适的面向对象设计原则对系统进行重构,正确无误绘制重构之后的类图;
2.正确无误绘制简单工厂模式、工厂方法模式、抽象工厂模式、单例模式和适配器模式实例的模式结构图;
3.使用任意一种面向对象编程语言实现简单工厂模式、工厂方法模式、抽象工厂模式、单例模式和适配器模式实例,代码运行正确无误。
四、实验步骤
1.选择合适的面向对象设计原则对系统进行重构,使用PowerDesigner绘制重构之后的类图;
2.使用PowerDesigner绘制简单工厂模式实例结构图并用面向对象编程语言实现该模式实例;
3.使用PowerDesigner绘制工厂方法模式实例结构图并用面向对象编程语言实现该模式实例;
4.使用PowerDesigner绘制抽象工厂模式实例结构图并用面向对象编程语言实现该模式实例;
5.使用PowerDesigner绘制单例模式实例结构图并用面向对象编程语言实现该模式实例;
6.使用PowerDesigner绘制适配器模式结构图并用面向对象编程语言实现该模式。
五、实验报告要求
1.提供重构之后的类图,简要说明重构过程中所运用的面向对象设计原则;
2.提供简单工厂模式实例结构图及实现代码;
3.提供工厂方法模式实例结构图及实现代码;
4.提供抽象工厂模式实例结构图及实现代码;
5.提供单例模式实例结构图及实现代码;
6.提供适配器模式实例结构图及实现代码;
7.注意调整类图中文字的字体及字号,注意图的整体布局和图的大小,避免使用交叉线,注意代码字体和颜色,代码字体需一致,颜色需统一;
8.认真写好实验总结;
9.提交电子版实验报告,格式为“学号-姓名-实验2.doc”,如“060102-张三-实验2.doc”,所有材料(包括类图和源代码)均放在一个Word文件中,格式为doc或docx,不需要提交PowerDeigner所保存的oom模型,也无须单独提交源代码。
CENTRALSOUTHUNIVERSITY
《软件体系结构》实验报告
实验名称基本数据类型和运算
学生姓名张三
学生学号12345678
专业班级软件工程1101班
指导教师李四
完成时间2011年10月1日
六、实验结果
1.重构之后的类图:
重构过程中所使用的面向对象设计原则及简要说明:
2.类图:
实现代码:
//代码颜色使用黑色,字体使用TimesNewRoman或Arial,字号为五号,如
abstractclassShape
3.类图:
4.类图:
实现代码:
5.类图:
6.实现代码:
7.类图:
8.类图:
9.类图:
10.类图:
11.类图:
七、实验总结
包括收获及感受。