第3章结构型设计模式实验
实验学时: 4
每组人数: 1
实验类型: 3 (1: 基础型2: 综合型3: 设计型4: 研究型)
实验要求: 1 (1: 必修2: 选修3: 其他)
实验类别: 3 (1: 基础2: 专业基础3: 专业4: 其他)
3.1实验目的
1. 结合实例,熟练绘制常见的结构型设计模式结构图。
2. 结合实例,熟练使用任意一种面向对象编程语言实现常见的结构型设计模式。
3. 通过本实验,理解每一种结构型设计模式的模式动机,掌握模式结构,学习如何使用代码实现这些设计模式。
3.2实验内容
1. 某OA系统需要提供一个加密模块,将用户机密信息(例如口令、邮箱等)加密之后再存储在数据库中,系统已经定义好了数据库操作类。为了提高开发效率,现需要重用已有的加密算法,这些算法封装在一些由第三方提供的类中,有些甚至没有源代码。试使用适配器模式设计该加密模块,实现在不修改现有类的基础上重用第三方加密方法。要求绘制相应的类图并编程模拟实现,需要提供对象适配器和类适配器两套实现方案。
2. 某手机美图APP软件支持多种不同的图像格式,例如JPG、GIF、BMP等常用图像格式,同时提供了多种不同的滤镜对图像进行处理,例如木刻滤镜(Cutout)、模糊滤镜(Blur)、锐化滤镜(Sharpen)、纹理滤镜(Texture)等。现采用桥接模式设计该APP软件,使得该软件能够为多种图像格式提供一系列图像处理滤镜,同时还能够很方便地增加新的图像格式和滤镜,绘制对应的类图并编程模拟实现。
3. 某移动社交软件要增加一个群组(Group)功能。通过设置,用户可以将自己的动态信息(包括*新动态、新上传的视频以及分享的链接等)分享给某个特定的成员(Member),也可以分享给某个群组中的所有成员; 用户可以将成员添加至某个指定的群组; 此外,还允许用户在一个群组中添加子群组,以便更加灵活地实现面向特定人群的信息共享。现采用组合模式设计该群组功能,绘制对应的类图并编程模拟实现。
4. 在某OA系统中提供一个报表生成工具,用户可以通过该工具为报表增加表头和表尾,允许用户为报表增加多个不同的表头和表尾,用户还可以自行确定表头和表尾的次序。为了能够灵活设置表头和表尾的次序并易于增加新的表头和表尾,现采用装饰模式设计该报表生成工具,绘制对应的类图并编程模拟实现。
5. 某软件公司为新开发的智能手机控制与管理软件提供了一键备份功能,通过该功���可以将原本存储在手机中的通讯录、短信、照片、歌曲等资料一次性全部拷贝到移动存储介质(例如MMC卡或SD卡)中。在实现过程中需要与多个已有的类进行交互,例如通讯录管理类、短信管理类等。为了降低系统的耦合度,试使用外观模式来设计并编程模拟实现该一键备份功能。
6. 某OA系统采用享元模式设计权限控制与管理模块,在该模块中,将与系统功能相对应的业务类设计为享元类并将相应的业务对象存储到享元池中(提示: 可使用Map实现,key为业务对象对应的权限编码,value为业务对象)。用户身份验证成功后,系统通过存储在数据库中的该用户的权限编码集从享元池获取相应的业务对象并构建权限列表,在界面上显示用户所拥有的权限。根据以上描述,绘制对应的类图并编程模拟实现。
7. 在某电子商务系统中,为了提高查询性能,需要将一些频繁查询的数据保存到内存的辅助存储对象中(提示: 可使用Map实现)。用户在执行查询操作时,先判断辅助存储对象中是否存在待查询的数据,如果不存在,则通过数据操作对象查询并返回数据,然后将数据保存到辅助存储对象中,否则直接返回存储在辅助存储对象中的数据。现采用代理模式中的缓冲代理实现该功能,要求绘制对应的类图并编程模拟实现。
3.3实验要求
1. 结合实例,绘制常见结构型设计模式的结构图。
2. 使用任意一种面向对象编程语言实现常见结构型设计模式实例,代码运行正确。
3.4实验步骤
练习1: 结合实例,绘制适配器模式实例结构图并用面向对象编程语言实现该模式实例。
练习2: 结合实例,绘制桥接模式实例结构图并用面向对象编程语言实现该模式实例。
练习3: 结合实例,绘制组合模式实例结构图并用面向对象编程语言实现该模式实例。
练习4: 结合实例,绘制装饰模式实例结构图并用面向对象编程语言实现该模式实例。
练习5: 结合实例,绘制外观模式实例结构图并用面向对象编程语言实现该模式实例。
练习6: 结合实例,绘制享元模式实例结构图并用面向对象编程语言实现该模式实例。
练习7: 结合实例,绘制代理模式实例结构图并用面向对象编程语言实现该模式实例。
3.5实验结果
练习1: 需要提供适配器模式实例的结构图(类图)和实现代码。
练习2: 需要提供桥接模式实例的结构图(类图)和实现代码。
练习3: 需要提供组合模式实例的结构图(类图)和实现代码。
练习4: 需要提供装饰模式实例的结构图(类图)和实现代码。
练习5: 需要提供外观模式实例的结构图(类图)和实现代码。
练习6: 需要提供享元模式实例的结构图(类图)和实现代码。
练习7: 需要提供代理模式实例的结构图(类图)和实现代码。
3.6实验小结
请总结本次实验的体会,包括学会了什么、遇到哪些问题、如何解决这些问题以及存在哪些有待改进的地方。