1、某信息咨询公司推出收费的在线商业信息查询模块,需要对查询用户进行身份验证(ValidateProxy),并记录查询日志,以便根据查询次数收取查询费用,现使用代理模式设计该系统。(1)UML类图(2)实现代码packagework81;/***@Description:*@Author:Xxx*@Date:2020年4月27日**/publicinterfaceSubject{voidvalidate();}packagework81;importjava.util.HashMap;/***@Description:*@Author:Xxx*@Date:2020年4月27日**/publicclassRealSubjectimplementsSubject{@Overridepublicvoidvalidate(){System.out.println("正在验证客户身份……");}}packagework81;/***@Description:*@Author:Xxx*@Date:2020年4月27日**/publicclassValidateProxyimplementsSubject{privateRealSubjectsubject;publicValidateProxy(RealSubjectiSubject){this.subject=iSubject;}@Overridepublicvoidvalidate(){before();subject.validate();after();}publicvoidsearchLog(){System.out.println("查询日志记录……");}publicvoidbefore(){System.out.println("验证客户身份之前……");}publicvoidafter(){System.out.println("验证客户身份之后……");this.searchLog();}}(3)测试代码packagework81;/***@Description:*@Author:Xxx*@Date:2020年5月10日**/publicclassClient{publicstaticvoidmain(String[]args){ValidateProxyvProxy=newValidateProxy(newRealSubject());vProxy.validate();}}(4)结果截图2、在某电子商务系统中,为了提高查询性能,需要将一些频繁查询的数据保存到内存的辅助存储对象中(建议使用Map实现)。用户在执行查询操作时,先判断辅助存储对象中是否存在待查询的数据,如果不存在,则通过数据操作对象查询并返回数据,然后将数据保存到辅助存储对象中,否则直接返回存储在辅助存储对象中的数据。现采用代理模式中的缓存代理实现该功能。(1)UML类图(2)实现代码packagework82;/***@Description:*@Author:Xxx*@Date:2020年5月10日**/publicinterfaceISubject{booleansearchInCache(Stringusername,Stringdata);}packagework82;importjava.util.HashMap;importjava.util.Map;importjava.util.concurrent.ConcurrentHashMap;/***@Description:*@Author:Xxx*@Date:2020年5月10日**/publicclassRealSubjectimplementsISubject{privateMapcacheMap=newHashMap<>();publicvoidsetCacheMap(MapcacheMap){this.cacheMap=cacheMap;}publicMapgetCacheMap(){returncacheMap;}publicbooleanfindData(Stringusername,Stringdata){booleanisExist=false;if(this.getCacheMap().containsKey(username)this.getCacheMap().containsValue(data)){isExist=true;}returnisExist;}@OverridepublicbooleansearchInCache(Stringusername,Stringdata){if(this.findData(username,data)){returntrue;}else{returnfalse;&}}publicvoidsaveInCache(Stringusername,Stringdata){this.getCacheMap().put(username,data);System.out.println("用户:"+username+"记录:"+data+"缓存成功!");}}packagework82;importjava.util.Map;importjava.util.concurrent.ConcurrentHashMap;/***@Description:*@Author:Xxx*@Date:2020年5月10日**/publicclassCacheProxyimplementsISubject{privateRealSubjectrSubject;publicCacheProxy(RealSubjectrealSubject){this.rSubject=realSubject;}publicvoidbefore(){System.out.println("开始查询……");}@OverridepublicbooleansearchInCache(Stringusername,Stringdata){before();if(rSubject.searchInCache(username,data)){System.out.print("查到结果---");System.out.println("用户名:"+username+"记录:"+data);after();returntrue;}else{System.out.println("缓存中无该记录!");rSubject.saveInCache(username,data);after();returnfalse;}}publicvoidafter(){System.out.println("查询结束!");}}(3)测试代码packagework82;/***@Description:*@Author:Xxx*@Date:2020年5月10日**/publicclassClient{publicstaticvoidmain(String[]args){try{CacheProxycProxy=newCacheProxy(newRealSubject());cProxy.searchInCache("zhangSan","data3");System.out.println("===================");cProxy.searchInCache("zhangSan","data3");}catch(Exceptione){e.printStackTrace();}}}(4)结果截图