代理模式

代理模式

定义

代理访问某一个对象,从而实现过程中的监管,不直接对外暴露对象

应用场景

当访问某一个服务时,由于需要对这个服务或者多个服务进行管控,可以提供一个统一的入口来进行管控,进行代理,比如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}
没有输入,获取输入的太多啦,我不返回了

`

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值