思考并回答以下问题:
静态代理
静态代理有一个最大的缺陷:接口与代理类是1对1的,有多个接口需要代理,就需要新建多个代理类,繁琐,类爆炸。每一个真实类都需要一个创建新的代理类。
透明代理:
动态代理
动态代理使用了反射,为了灵活稍稍牺牲一点性能。
PHP用反射实现动态代理
__call(),在对象中调用一个不可访问方法时调用。
该方法有两个参数,第一个参数$function_name会自动接收不存在的方法名,第二个$arguments则以数组的方式接收不存在方法的多个参数。
1 |
|
静态代理和动态代理的区别
•静态代理需要自己写代理类—>代理类需要实现与目标对象相同的接口
•而动态代理不需要自己编写代理类—->(是动态生成的)
使用静态代理时:
•如果目标对象的接口有很多方法的话,那我们还是得一一实现,这样就会比较麻烦
使用动态代理时:
•代理对象的生成,是利用JDKAPI,动态地在内存中构建代理对象(需要我们指定创建 代理对象/目标对象 实现的接口的类型),并且会默认实现接口的全部方法。
动态代理就是拦截直接访问对象,可以给对象进行增强的一项技能。
总结
原有的对象需要额外的功能,想想动态代理这项技术!