某信息咨询公司推出收费的在线商业信息查询模块,需要对查询用户进行身份验证并记录查询日志,以便根据查询次数收取查询费用,现使用代理模式设计该系统,所得类图如图1所示: 图1 类图 在图1中,AccessValidator类用于验证用户身份,它提供方法validate()来实现身份验证;Logger类用于记录用户查询日志,它提供方法log()来保存日志;RealSearcher类实现查询功能,它提供方法doSearch()来查询信息.ProxySearcher作为查询代理,维持对RealSearcher对象、AccessValidator对象和Logger对象的引用. 【Java代码】 class AccessValidator { public boolean validate(String userId) { //身份验证实现代码省略 } } class Logger { public void log(String userId) { //日志记录实现代码省略 } } interface Searcher { public String doSearch(String userId,String keyword); } class RealSearcher implements Searcher { public String doSearch(String userId,String keyword) { //信息查询实现代码省略 } } class ProxySearcher (1) { private RealSearcher searcher = new RealSearcher(); private AccessValidator validator; private Logger logger; public String doSearch(String userId,String keyword) { //如果身份验证成功,则执行查询 if( (2) ) { String result = searcher.doSearch(userId,keyword); (3) ; //记录查询日志 (4) ; //返回查询结果 } else { return null; } } public boolean validate(String userId) { validator = new AccessValidator(); (5) ; } public void log(String userId) { logger = new Logger(); (6) ; } } class Test { public static void main(String args[]) { (7) ; //针对抽象编程,客户端无须分辨真实主题类和代理类 searcher = new ProxySearcher(); String result = searcher.doSearch("Sunny","Money"); //此处省略后续处理代码 } }
发布时间:2024-06-11 15:03:17