13.代理模式

  • 一、角色
    • 主题接口(Subject):定义代理类和真实主题的公共对外方法
    • 真实主题(RealSubject):真正实现业务逻辑的类
    • 代理类(ProxyHandler):用来代理和封装真实主题
  • 二、适用场景
    • 代理对象存在的价值主要用于拦截对真实业务对象的访问
    • 代理对象应该具有和目标对象(真实业务对象)相同的方法,即实现共同的接口或继承于同一个类
    • 代理对象应该是目标对象的增强,否则我们就没有必要使用代理了
  • 三、实例
    • 图1是一个播放电影的实例,电影被委托给电影院进行播放,其中Movie是主题接口,RealMovie是真实主题,Cinema是代理类,客户端通过调用Cinema,Cinema的play方法实际调用的是RealMovie的paly方法,并加入了增强逻辑,图中的例子是一种静态代理模式,下面代码示例中还给出了在JAVA中利用jdk的Proxy对象的newProxyInstance方法实现动态代理的方式
    • 代码地址:https://github.com/lanhei/DesignPattern/tree/master/src/com/lanhei/patterns/proxy
    图-1
原文地址:https://www.cnblogs.com/zhongj/p/11320191.html