版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- T/CSAE 306-2023摩托车和轻便摩托车 燃油箱和燃油管渗透排放测量方法
- T/CSBM 0058-2025含可降解微粒类面部软组织植入剂体内降解速率和胶原再生性能评价方法
- T/CSTEA 00055-2023云霄黄观音
- T/ZSP 011-2024海外知识产权风险预警工作规范
- T/CSAE 421-2025纯电动汽车热系统高低温能量消耗台架试验方法
- T/SLA 002-2025新型阅读空间建设服务和管理指南
- T/CPIA 0076-2024光伏并网逆变器高加速寿命试验方法
- T/CSAE 451-2025锂离子电池单体循环寿命预测 电极活性材料损失测量法
- T/CMSA 0056-2025低空经济气象基础设施建设总体要求
- T/SERB 005-2026水量型与水质型缺水评价技术导则
- 2026半导体材料行业发展分析及前景趋势与投融资策略研究报告
- 中国烟草招聘行测+专业知识考试题库(附答案)
- GA/T 1043-2025智能交通管理系统前端设备运行维护规范
- JJG 596-2026 安装式交流电能表检定规程
- 2026年上海市春季高考英语试卷试题完整版(含答案+听力MP3)
- 媒体创意与策划
- 2025年-2020中国近代史获奖教案-新版
- 《机械制图》电子教材
- 游泳馆入股合同协议书
- OTDR使用课件教学课件
- 门卫夜间值班管理办法
评论
0/150
提交评论