AccessValidator类用于验证用户身份,它提供方法validate()来实现身份验证;Logger类用于记录用户查询日志,它提供方法log()来保存日志;RealSearcher类实现查询功能,它提供方法doSearch()来查询信息。ProxySearcher作为查询代理,维持对RealSearcher对象、AccessValidator对象和Logger对象的引用。
//抽象主题类
public interface Searcher {
String doSearch(String userId,String keyword);
}
//真实主题类
public class RealSearcher implements Searcher{
@Override
public String doSearch(String userId, String keyword) {
//信息查询实现代码省略
String s="性名:"+userId+" 密码:"+keyword;
return s;
}
}
//其他需要调用的类
public class AccessValidator {
public boolean validate(String userId)
{
//身份验证实现代码省略
if(userId.length()!=0){
System.out.println("身份验证成功");
return true;
}
else{
System.out.println("身份验证失败");
return false;
}
}
}
import java.util.ArrayList;
import java.util.List;
public class Logger {
private List<String> ls=new ArrayList<>();
public void log(String userId)
{
//日志记录实现代码省略
ls.add(userId);
System.out.println(userId+"日志记录成功");
}
}
//代理类
package proxyMode;
public class ProxySearcher implements Searcher {
private RealSearcher searcher = new RealSearcher();
private AccessValidator validator;
private Logger logger;
@Override
public String doSearch(String userId, String keyword) {
//如果身份验证成功,则执行查询
if (validate(userId)) {
String result = searcher.doSearch(userId, keyword);
log(userId); //记录查询日志
return result; //返回查询结果
} else {
return null;
}
}
public boolean validate(String userId)
{
validator = new AccessValidator();
return validator.validate(userId);
}
public void log(String userId)
{
logger = new Logger();
logger.log(userId);
}
}
//客户端
package proxyMode;
public class Client {
public static void main(String[] args) {
Searcher searcher=new ProxySearcher();
searcher.doSearch("****孟","123456");
}
}
运行结果: