代理模式
定义
代理访问某一个对象,从而实现过程中的监管,不直接对外暴露对象
应用场景
当访问某一个服务时,由于需要对这个服务或者多个服务进行管控,可以提供一个统一的入口来进行管控,进行代理,比如api网关,可以对api进行代理对于不符合要求的的请求或者大量的请求不予转发
优点
1 可以减少关键对象方法对外暴露,增加安全性
2 扩展性强,可以针对不同的情况进行代理访问
3.只关注自己的 功能实现,实现模块化
缺点
代理过程中存在性能的消耗,业务逻辑的判断,特别是非常复杂的逻辑判断会让访问变慢
实现
比如我有个用户的服务,需要进行代理
我有一个获取用户信息的方法,但是一次不能获取太多用户信息,超过太多我就不返回
使用代理模式
用户接口
public interface UserService {
void getUserInfos(Integer count);
}
用户实现
public class UserServiceImpl implements UserService{
@Override
public void getUserInfos(Integer count) {
for (int i = 0; i < count; i++) {
Map<String, String> usermap = new HashMap<>();
usermap.put("name", "zhangsan");
usermap.put("age", "12");
System.out.println("user = " + usermap);
}
}
}
代理类
public class ProxyUser implements UserService {
private UserService userService;
public ProxyUser(UserService userService) {
this.userService = userService;
}
@Override
public void getUserInfos(Integer count) {
if (count != null && count < 10) {
userService.getUserInfos(count);
} else {
System.out.println("没有输入,获取输入的太多啦,我不返回了");
}
}
}
测试类
public static void main(String[] args) {
ProxyUser proxyUser = new ProxyUser(new UserServiceImpl());
proxyUser.getUserInfos(1);
proxyUser.getUserInfos(1000);
}
测试结果
user = {name=zhangsan, age=12}
没有输入,获取输入的太多啦,我不返回了
`