软件体系结构实验.docx
软件体系结构实验81、某信息咨询公司推出收费的在线商业信息查询模块,需要对查询用户进行身份验证 (ValidateProxy),并记录查询日志,以便根据查询次数收取查询费用,现使用代理模式设计该系统。(1) UML类图(2)实现代码package work81;/*(Description:* Author: Xxx 一Date: 2020 年 4 月 27 日* /public interface Subject void validate();eProxy.searchlnCache("zhangSan", "dataS");System. out. printin (,="); eProxy.searchInCache("zhangSan""dataS"); catch (Exception e) e.printStackTrace();)(4)结果截图开始查询缓存中无该记录!川户:zhangSan记束:data3 缓存成功!餐询结束!开始簧询,杳到结果 川户名:zhangSan记录:data3畲前结束!package work81;import java util HashMap; /*Descnption:*Author: Xxx 一*Date: 2020 年 4 月 27 日* /public class RealSubject ikvxpleients Subject©Overridepublic void validate() System.printin ("正在验证客户身份”);)package work81;/*©Description:Author: Xxx 一*Date: 2020 年 4 月 27 日* /public class ValidateProxy ikvipteients Subject private RealSubject subject;public ValidateProxy(RealSubject iSubject) this, subject = iSubject;©Overridepublic void validate() before();subject . validate();after();)public void searchLog()System .加力print In (”查询日志记录");)public void before()System .加力printin ("验证客户身份之前”);)public void after() System .2山printin ("验证客户身份之后");thiS.searchLog();) )(3)测试代码package work81;/*DescHpticm:*Author: Xxx 一*Date: 2020 年 5 月10 口* /public class Client public static void main(String args) ValidateProxy vProxy = new ValidateProxy(new RealSubject();vProxy. validate();)(4)结果截图<terminated> Client (10) Javi 发证客户身份之而二 正在验证客户身份. 验证一户身份之后 杳询口忐记录.2、在某电子商务系统中,为了提高查询性能,需要将一些频繁查询的数据保存到内存的辅助存储对象中(建议使用M叩实现)。用户在执行查询操作时,先判断辅助存储对象中 是否存在待查询的数据,如果不存在,那么通过数据操作对象查询并返回数据,然后将数据 保存到辅助存储对象中,否那么直接返回存储在辅助存储对象中的数据。现采用代理模式中 的缓存代理实现该功能。(1) UML类图(2)实现代码 package work82;/*Description:*Autlaor: Xxx _*Date: 2020 年 5 月 10 日* /public interface iSubject boolean searchlnCache(String usernameString data); )package work82;沁port java.util.HasMap)import javautil.Map;沁port java.util.concurrent.ConcurrentHasMap;/*Description:Author: Xxx*Pate: 2020 年 S 月 1。日*兴/public class RealSubject implements lSubjectprivate MapStHcg)StringcacheMap = new HasMap<>0;public void setCackeMqp(MapStn>vgj Stringy cacheMap)this.cacheMap = cacheMap;)public MapStHcg, String> getCackeMapO return cacheMap;public boolean findData(String username String data)boolean isExist = false;if (tkis.getCackeMap().containsKey(usernaie) &tkis.getCackeMap().containsVafue(data) isExist = true;)return isExist;(Overridepublic boolean searcklnCacke(Stnng use mang data) if (this.findData(usernaej data) return true;e/se return false;)public void savelnCaclae(Stnng use ma me .String data)this.getCacheMap0.pat(usemame, data);Sgs%M.0t.print伍("用户:"+6。mM0+"记录:"+4±+"缓存成功川);)package work82;沁port java认七il.Map;import java.util.concurrent.ConcurrentHasMap;/*Description:*Author: Xxx*P«te: 2020 年 5 月 1。日*兴/public class Cacheproxy ikvipleients ISubject(private RealSubject Subject;public CacheProxy(RealSubject realSubject) tkis.rSubject = realSubject;public void before()SgstCMA.。七pn田M”开始查询©Overridepublic boolean searchlnCache(String use ma me .Stri ng data) before();if (rSubject.searchlnCacheCusemaej data) ("查到结果");Sgstcm.ONt.pn'nt/n("用户名:+scmaMC+"记录:"+data);after();return true;e(se SgsteM.otxt.pn田nC缓存中无该记录巧;rSubject.savelnCacheCusemaiej data);after();return false;)public void after()SgsteM ,。戊.pn田八(查询结束!");)(3)测试代码package work82;/*©Description: *Author: Xxx *Date: 2020 年 5 月 1。日* /public class Client public static void main(String args) CacheProxy cProxy = new CacheProxy(new RealSubject();