以下是代理模式的一些常见应用场景以及一个 Java 代码示例:
应用场景:
- 权限控制:可以通过代理对象来检查用户是否具有执行某些操作的权限。
- 远程调用:当需要调用远程服务时,可以使用代理来隐藏网络通信的细节。
- 缓存:代理可以在调用实际对象之前,先检查缓存中是否已经有了所需的结果,如果有则直接返回,避免重复计算。
- 日志记录:在调用实际对象的方法时,代理可以记录相关的日志信息。
下面是一个简单的权限控制的代理模式示例代码:
interface UserService {
void performAction();
}
class RealUserService implements UserService {
@Override
public void performAction() {
System.out.println("执行实际操作");
}
}
class UserServiceProxy implements UserService {
private UserService realUserService;
private String userRole;
public UserServiceProxy(String userRole) {
this.userRole = userRole;
}
@Override
public void performAction() {
if ("admin".equals(userRole)) {
realUserService = new RealUserService();
realUserService.performAction();
} else {
System.out.println("您没有足够的权限执行此操作");
}
}
public static void main(String[] args) {
// 以管理员身份调用
UserService adminProxy = new UserServiceProxy("admin");
adminProxy.performAction();
// 以普通用户身份调用
UserService normalUserProxy = new UserServiceProxy("normal");
normalUserProxy.performAction();
}
}
在上述代码中,UserService
是一个接口,RealUserService
是实际的服务类,UserServiceProxy
是代理类。在代理类的performAction
方法中,根据用户角色来决定是否调用实际服务类的方法。在main
方法中,创建了不同角色的代理对象并调用其方法,展示了不同的结果。