代理模式

说到Java设计模式,有一种设计模式那就不得不提一下,那就是 — 代理模式,我也不知道代理模式为什么会这么出名,甚至在我还没有学设计模式得时候我就听说过了,大概是和朋友圈里面各种代购代理有关吧。

如果没有听说过的话也没有关系,我这里可以举个栗子:我们朋友圈里面的微商(代理类)就是一个代理,他从厂家(服务类)拿货,然后我们(客户端)要买厂家的东西,不会直接到厂家哪里买,直接到微商哪里买,我们不直接接触厂家,但是可以获得厂家的东西,这个就是代理模式。

代理模式

我们从概念上来说,代理模式(Proxy):为其它对象提供一种代理以控制对对这个对象的访问。

代理类的UML图如下:
在这里插入图片描述

代理模式实现

我这里用上面微商的栗子来简单实现一下:

代理接口类:

interface SellingProducts {
  void sell();
}

厂家类:

public class Factory implements SellingProducts {

  public void sell() {
    System.out.println("开始卖面膜啦");
  }
}

代理类:

public class Proxy implements SellingProducts {

  Factory factory = new Factory();

  public void sell() {
    factory.sell();
  }
}

客户端调用:

public class Client {
  public static void main(String args[]) {
    Proxy weiShang = new Proxy();
    weiShang.sell();
  }
}

这里简单解释一下:

1、创建一个卖产品的接口

2、厂家类实现卖产品的接口

3、代理类也实现卖产品的接口,但是这里实现之后,创建厂家类的对象,调用的是厂家类的方法

4、客户端创建代理类对象,调用代理类的方法,但是最终还是调用的厂家类的方法

是不是感觉代理模式的逻辑还是很简单的,那么代理模式一般有些什么使用场景呢?

1、远程代理:也就是为一个对象在不同的地址空间提供局部代表,这样可以隐藏一个对象存于不同地址空间的事实。比如说我们远程访问数据,某些文件夹会映射到我们本地,我们感觉是在访问本地的文件夹,其实是访问的远程文件夹,代理类就是提供远程访问。

2、虚拟代理:根据需要创建很大的对象。通过它来存放实例化需要很长时间的真实对象。比如我们访问一个html页面的时候,我们可以打开这个页面,但是这个页面的某些大的图片,视频则可以慢慢加载,我们代理类就是存放了图片和视频的路径。

3、安全代理:用来控制真实对象的访问权限。我们的客户端类只能访问代理类,基本实现了控制真实对象的访问权限。

4、智能指引:当调用真实对象的时候,代理还可以处理另外一些事。我们的代理类除了实现真实类的相关逻辑以外,还可以添加一些需要实现的另外的逻辑。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值