解决的问题
代理模式是Java开发中使用较多的一种设计模式。代理设计就是为其他对象提供一种代理以控制对这个对象的访问。
应用场景:
- 安全代理:屏蔽对真实角色的直接访问。
- 远程代理:通过代理类处理远程方法调用(RMI)
延迟加载:先加载轻量级的代理对象,真正需要再加载真实对象 比如你要开发一个大文档查看软件,大文档中有大的图片,有可能一个图片有 100MB,在打开文件时,不可能将所有的图片都显示出来,这样就可以使用代理 模式,当需要查看图片时,用proxy来进行大图片的打开。
分类 :
静态代理(静态定义代理类)
- 动态代理(动态生成代理类)
JDK自带的动态代理,需要反射等知识
举例
public class StaticProxyTest {public static void main(String[] args) {Proxy s = new Proxy(new RealStar());//传入被代理对象s.confer();s.signContract();s.bookTicket();s.sing();//通过代理的对象调用被代理类的方法s.collectMoney();}}interface Star {void confer();// 面谈void signContract();// 签合同void bookTicket();// 订票void sing();// 唱歌void collectMoney();// 收钱}//被代理类class RealStar implements Star {public void confer() {}public void signContract() {}public void bookTicket() {}public void sing() {System.out.println("明星:歌唱~~~");}public void collectMoney() {}}//代理类class Proxy implements Star {private Star real;public Proxy(Star real) {//构造器,通过多态传入被代理对象this.real = real;}public void confer() {System.out.println("经纪人面谈");}public void signContract() {System.out.println("经纪人签合同");}public void bookTicket() {System.out.println("经纪人订票");}public void sing() {real.sing();//调用被代理类sing方法}public void collectMoney() {System.out.println("经纪人收钱");}}
