




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验项目名称: 对象适配器模式 (所属课程: 软件设计模式 )学 院:计算机科学与信息工程学院 专业班级:软件工程13-1 姓 名:王会芳 学 号:实验日期:2016年4月3 实验地点:A06 404 合作者: 指导教师:高原 本实验项目成绩: 教师签字: 日期: 一、 实验目的与要求1.练习使用对象适配器模式。设计相关的模拟场景并进行实施,验证模式特性,掌握其优缺点。2.实验结束后,对相关内容进行总结。二、实验内容1.模式应用场景说明某系统需要提供一个加密模块,将用户信息(如密码等机密信息)机密之后再存储在数据库中,系统已经定义好了数据库操作类。为了提高开发效率,现
2、需要重用已有的加密算法,这些算法封装在一些由第三方提供的类中,有些甚至没有源代码。使用适配器模式设计该加密模块,实现在不修改现有类的基础上重用第三方加密方法。2.应用场景类图通过分析,可使用对象适配器模式实现该系统设计,该实例类图如图1所示。DataOperationabstract- password : String+ setPassword(String password) : void+ getPassword() : String+ doEncrypt(int key, String ps) : StringCipherAdapter- cipher : Caesar+ Cipher
3、Adapter()+ doEncrypt(int key, String ps) : StringNewCipherAdapter- cipher : NewCipher+ NewCipherAdapter()+ doEncrypt(int key, String ps) : StringCaesar+ doEncrypt(int key, String ps) : StringNewCipher+ doEncrypt(int key, String ps) : Stringciphercipher图1 加密适配器类图3.实现代码与解释(1)目标抽象类DataOperation(数据操作类)p
4、ublic abstract class DataOperation private String password;public void setPassword(String password)this.password=password;public String getPassword()return this.password;public abstract String doEncrypt(int key, String ps);DataOperation类中包含了抽象方法doEncrypt(),客户端针对抽象类DataOperation进行编程,在客户端代码中调用DataOper
5、ation的doEncrypt()实现数据加密。(2)适配者类Caesar(数据加密)public class Caesar public String doEncrypt(int key, String ps)String es=;for(int i=0;i=a&cz) c-=26;if(c=A&cZ) c-=26;if(cZ) c+=26;es+=c;return es;Caesar类是一个由第三方提供的数据加密类,该类定义为final类,无法继承。因此本实例不能通过类适配器来实现,只能使用对象适配器实现。客户端在使用时无须关心Caesar类的源代码,甚至无法获得该类的源代码,只有编译后的
6、class文件。(3)适配器类CipherAdapter(加密适配器类)public class CipherAdapter extends DataOperation private Caesar cipher;public CipherAdapter()cipher=new Caesar();public String doEncrypt(int key, String ps)return cipher.doEncrypt(key, ps);CipherAdapter类充当适配器角色,由于Caesar类无法继承,本实例采用对象适配器模型,在CipherAdapter类中定义一个Caesar
7、类型的成员对象,在CipherAdapter类的构造函数实例化Caesar对象,CipherAdapter与Caesar类之间是组合关联关系。(4)XML操作工具类XMLUtilimport javax.xml.parsers.*;import org.w3c.dom.*;import org.xml.sax.SAXException;import java.io.*;public class XMLUtil/该方法用于从XML配置文件中提取具体类类名,并返回一个实例对象public static Object getBean()try/创建文档对象DocumentBuilderFactory
8、 dFactory = DocumentBuilderFactory.newInstance();DocumentBuilder builder = dFactory.newDocumentBuilder();Document doc;doc = builder.parse(new File(config.xml); /获取包含类名的文本节点NodeList nl = doc.getElementsByTagName(className); Node classNode=nl.item(0).getFirstChild(); String cName=classNode.getNodeValu
9、e(); /通过类名生成实例对象并将其返回 Class c=Class.forName(cName); Object obj=c.newInstance(); return obj; catch(Exception e) e.printStackTrace(); return null; (5)配置文件config.xml CipherAdapter(6)客户端测试类Clientpublic class Clientpublic static void main(String args)DataOperation dao=(DataOperation)XMLUtil.getBean();dao
10、.setPassword(wangHuiFang);String ps=dao.getPassword();String es=dao.doEncrypt(6,ps);System.out.println(明文为: + ps);System.out.println(密文为: + es);在客户端测试类Client中,我们需要多“wangHuiFang“进行加密,在实现时调用目标抽象类DataOperation的doEncrypt()方法,而将具体类的类名保存在config.xml配置文件中,程序运行时,将读取存取在配置文件中的类名,再通过Java反射机制生成对象,该对象在运行时将动态替换父类的
11、doEncrypt()方法,实现真正加密。4.结果及分析在配置文件中将节点中的内容设置为:CipherAdapter,则输出结果如下:如果需要更换一种更为安全的加密算法,如使用求模运算来进行加密,代码如下所示:public final class NewCipherpublic String doEncrypt(int key,String ps) String es=;for(int i=0;ips.length();i+)String c=String.valueOf(ps.charAt(i)%key);es+=c;return es;在系统中使用如上所述的新加密算法,可以对应增加一个新的适配器类,代码如下:public class NewCipherAdapter extends DataOperationprivate NewCipher cipher;public NewCipherAdapter()cipher=new NewCipher();public String doEnc
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 国际金融形成性考核册2025答案参考
- 分泌性中耳炎病人的护理
- 儿科肺炎个案护理报告
- 设备开机流程
- 胎儿产前诊断基本知识
- 中医养生与健康
- 患者健康教育宣教体系构建
- 风湿病病例分析
- 2025年钢管塔项目提案报告
- 2025年银盐型CTP版项目提案报告
- 2025至2030中国糠酸行业发展趋势分析与未来投资战略咨询研究报告
- 江西省上饶市广信区2023-2024学年七年级下学期6月期末考试数学试卷(含答案)
- 糖尿病病人胰岛素治疗讲课件
- 高压气体绝缘设备中SF6分解产物检测SO2传感器的设计与应用
- poct科室管理制度
- 沟通与表达讲课件
- 2025年山东高考化学真题及答案
- 2025-2030年中国鱼胶原蛋白肽行业市场现状供需分析及投资评估规划分析研究报告
- 形势与政策(2025春)超星学习通章节测试、考试及完整答案(夺冠)
- 广东省中山市2023-2024学年七年级下学期期末数学试题(含答案)
- 2025年人教部编版语文五年级下册期末检测真题及答案(2套)
评论
0/150
提交评论