代理模式的目标是通过代理类来隔离访问者对目标类的直接访问,访问者只能访问代理类,这样能够保证访问者对目标类的访问是受限的。
比如访问某些资源,如果访问者不具备访问的权限或条件,则代理类可以拒绝访问者的访问。这是常见实现权限的方式之一。
简单的代码可以描述该模式:
package dp.proxy;
public interface FileAccessor{
public void readFile(String filePath);
}
package dp.proxy;
public class FileAccessorImpl implements FileAccessor {
@Override
public void readFile(String filePath) {
System.out.println("读取文件操作......");
}
}
package dp.proxy;
public class FileAccessorProxy implements FileAccessor {
boolean accessAble = false;
FileAccessor originalAccessor;
public FileAccessorProxy(String userName) {
if (userName.equals("admin")) {
accessAble = true;
originalAccessor = new FileAccessorImpl();
}
}
@Override
public void readFile(String filePath) {
if (accessAble) {
originalAccessor.readFile(filePath);
} else {
System.out.println("对不起,你不能访问这个文件。");
}
}
}
package dp.proxy;
public class Main{
public static void main(String args[]){
FileAccessor fileAccessor1 = new FileAccessorProxy("user");
FileAccessor fileAccessor2 = new FileAccessorProxy("admin");
System.out.print("普通访问者试图访问文件: ");
fileAccessor1.readFile("/opt/local/file");
System.out.print("管理员试图访问文件: ");
fileAccessor2.readFile("/opt/local/file");
}
}
普通访问者试图访问文件: 对不起,你不能访问这个文件。
管理员试图访问文件: 读取文件操作......