i3geek.com
闫庚哲的个人博客

Java设计模式——代理模式

定义

为被代理对象提供一种代理,来控制对该对象的访问。(通过引入代理对象来间接访问一个对象) 中介作用,起到隐藏功能或增加功能的效果。

作用

被代理类A  ==方法增强==> 代理类B (增强方法,保护真实类)

比如:火车站售票处(卖票和退票的功能) ==代理类==> 火车站代售处(卖票功能)

分类

远程代理:为不同地域的对象提供局域网代表的对象,虚拟代理:大对象的延迟创建,保护代理:控制对一个对象的访问权限,智能引用代理:对目标对象提供一些额外的服务

实现(智能引用代理)

../_images/Proxy.jpg

静态代理

在编译前已经完成了代理工作,即编写两个类都实现了相同的接口或继承了相同的类。

方法一:继承(不推荐)

方法二:聚合(实现接口)

动态代理

运行中,动态为真实类生成对应的代理类并加载。

方法一:JDK动态代理(反射) 注:必须实现接口

方法二:CGLIB动态代理(继承)

时序图:

../_images/seq_Proxy.jpg

应用

EJB、Web Service等分布式技术都是代理模式的应用。在EJB中使用了RMI机制,远程服务器中的企业级Bean在本地有一个桩代理,客户端通过桩来调用远程对象中定义的方法,而无须直接与远程对象交互。在EJB的使用中需要提供一个公共的接口,客户端针对该接口进行编程,无须知道桩以及远程EJB的实现细节。

实现源代码:https://github.com/yangengzhe/coding-guide_i3geek/tree/master/docs/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F

赞(0)
未经允许不得转载:爱上极客 » Java设计模式——代理模式
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址