核心思想
A. 为其他对象提供一种代理,以控制对这个对象的访问;
B. 使用代理模式创建代理对象,让代理对象控制目标对象的访问(目标对象可以是远程的对象、创建开销大的对象或需要安全控制的对象),并且可以在不改变目标对象的情况下添加一些额外的功能;
C. 代理模式分为静态代理和动态代理;
D. 涉及到的角色: 抽象角色、代理角色、真实角色
- 抽象角色:声明真实对象和代理对象的共同接口;
- 代理角色:代理对象角色内部含有对真实对象的引用,从而可以操作真实对象,同时代理对象提供与真实对象相同的接口以便在任何时刻都能代替真实对象。同时,代理对象可以在执行真实对象操作时,附加其他的操作,相当于对真实对象进行封装;
- 真实角色:代理角色所代表的真实对象,是我们最终要引用的对象。
UML图
(1). Subject:抽象角色,抽象主题类可以是抽象类也可以是接口,是一个最普通的业务类型定义,无特殊要求。
(2). Proxy:代理角色,也叫委托类、代理类。它把所有抽象主题类定义的方法给具体主题角色实现,并且在具体主题角色处理完毕前后做预处理和善后工作。(最简单的比如打印日志);
(3). RealSubject:真实角色,具体主题角色,也叫被委托角色、被代理角色。是业务逻辑的具体执行者。