代理模式

代理模式

前言

我们平常买票,可能到过年高峰期会出现买不到票的情况,这个时候我们可能就会委托黄牛,或者携程这些第三方的帮我们进行抢票。
又可以说比如我们的代理服务器,我客户端通过代理服务器和我们真正的服务器进行交流,如爬虫服务器。
又可以说我们买房子,租房子,我们提要求给中介,由中介替我们去找寻房子。
又可以说我们要去见某个领导处理某件事情,可能我们需要先联系它的助理,然后由助理代我们去转达。
这些等待都是我们平常生活中的一种代理机制。我们不直接去联系源头,而是由我们的代理去操作。

  • 用处

    • 对源码的拓展
    • 权限机制管理
      当然这里还有其他许多用处,这里就说些我日常用的比较多的。
  • 分类

    • 静态代理
    • 动态代理
  • 源码拓展(静态代理实现)
    现在我们做个假设,比如我们源码中有一个buyinter对象,我们不能去对他进行更改,但我们想要对他进行拓展,我们分为 用户实现类 代理类 源头类 三类。

  • 源头类(保证实现了与代理类的同源性)

public interface buyInter {

   //买票
   public abstract void buyticket();
}
  • 代理类 (这里就对我们的源头类进行了拓展,增加了一个金额的设置以及判断操作)
public class buyproxy implements buyInter{
    private int money=0;

    public void setMoney(int money){
        this.money=money;
    }

    @Override
    public void buyticket() {
        if (money<=0){
            System.out.println("请告诉我们你需要购买的票价哦!");
            return;
        }
        System.out.println("你好,这里是黄牛集团,正在为买票!");
    }
}
  • 实现类
public class buyobject implements buyInter {
    buyproxy buyproxy;
    public buyobject(buyproxy buyproxy){
        this.buyproxy=buyproxy;
    }

    @Override
    public void buyticket() {
        System.out.println("我要买一张去北京的机票");
        System.out.println("100元的那种");
        buyproxy.setMoney(100);
        buyproxy.buyticket();
    }
}

运行结果

  buyproxy buyproxy=new buyproxy();
  buyobject buyobject=new buyobject(buyproxy);
  buyobject.buyticket();

  我要买一张去北京的机票
  100元的那种
  你好,这里是黄牛集团,正在为买票!

那么至此我们的一个静态代理实现就结束了,这里如果不明白源头类的用处在哪里我再来说明一次,源头类是为了保证我们实现类和代理类的同源性,实现相同方法,相同功能,这里我们的实现类就相当于我们自己,代理类就是我们的中介,由我们的代理类去找房子,注意这里源头类不是房子,它只是为了保持我们的实现类以及代理类的同源性。
再比如我们现在要操作数据库,但是普通用户只能读,而管理员才能删除,我们实现类就是用户,不用管什么权限,只管去操作就好,而我们的代理类负责我们的权限判断,如果我们是普通用户,它则帮助我们去进行读,如果我们是管理员它则帮助我们去删除。

尾言

什么时候我们应该使用静态代理,什么时候应该使用动态代理?
静态代理当我们的代理类较少的时候可以使用,较多我们应该是用动态代理。
静态代理的缺点,源头一改,我们的实现类以及代理类都要变动。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值