结构图:
释义:
代理模式(Proxy Pattern)是指为其他对象提供一种代理,以控制对这个对象的访问,可以在这个对象调用方法之前、调用方法之后去处理/添加新的功能。
代理模式:静态代理、动态代理(JDK代理)和Cglib代理
静态代理:
1)代理类和委托类实现了相同的接口,代理类通过委托类实现了相同的方法。这样就出现了大量的代码重复。如果接口增加一个方法,除了所有实现类需要实现这个方法外,所有代理类也需要实现此方法。增加了代码维护的复杂度。
2)代理对象只服务于一种类型的对象,如果要服务多类型的对象。势必要为每一种对象都进行代理,静态代理在程序规模稍大时就无法胜任了。
动态代理:
静态代理每个代理类只能为一个接口服务,这样程序开发中必然会产生许多的代理类,所以我们就会想办法可以通过一个代理类完成全部的代理功能,那么我们就需要用动态代理,是在运行时,通过反射机制实现动态代理,并且能够代理各种类型的对象。
代理模式和装饰模式区别:
代理模式中,代理类对被代理的对象有控制权,决定其执行或者不执行。而装饰模式中,装饰类对代理对象没有控制权,只能为其增加一层装饰,以加强被装饰对象的功能,