代理模式:为其他对象提供一种代理以控制对这个对象的访问。
最简单的代理模式,分为三种角色:
抽象主题角色:代理类与被代理共同实现的接口,内部定义了最普通的业务类型。
具体主题角色:被代理类,具体实现接口的方法。
代理主题角色:代理类,继承主题接口,并生成与被代理类方法名一致的方法,并且调用被代理类的方法。
代理模式的扩展
1、普通代理
调用者只能调用代理对象,并且只知道代理对象类型,不知被代理对象类型。
2、强制代理
必须通过实例化被代理对象,然后通过被代理对象的指定的代理对象进行方法调用。
代理类不仅仅可以实现主题接口,也可以实现其他接口完成不同的任务,而且代理的目的是在目标对象方法的基础上作增强,这种增强的本质通常就是对目标对象的方法进行拦截和过滤。
动态代理
动态代理是在实现阶段不用关心代理谁,而在运行阶段才指定代理哪一个对象。使用JDK提供的动态代理接口InvocationHandler对被代理类的方法进行代理。
真实主题实现主题类接口
所有的动态代理实现方法都通过invoke的方法调用。
调用 newProxyInstance(c.getClassLoader(),c.getInterfaces,InvocationHandler h)方法, 重新生成了一个对象,c.getInterfaces找到了类的所有接口,然后实现了接口的所有方法,但是方法都是空的,这些方法都由InvocationHandle方法来接管。
Original: https://www.cnblogs.com/maple92/p/6675911.html
Author: Topze
Title: 设计模式——–代理模式
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/582958/
转载文章受原作者版权保护。转载请注明原作者出处!