代理模式(Proxy Pattern)-结构型
The Proxy design pattern Provides a surrogate or placeholder for another object to control access to it.
1、Proxy
-保存一个引用使得代理可以访问实体。若RealSubject和Subject的接口相同,Proxy会引用Subject。
-提供一个与Subject的接口相同的接口,这样代理就可以用来替代实体。
-控制对实体店存取,并可能负责创建和删除它。
-其他功能依赖于代理的类型。
2、Subject
-定义RealSubject和Proxy 的共用接口,这样就在任何使用RealSubject的地方都可以使用Proxy。
3、RealSubject
-定义Proxy所代表的实体。
java中一般三种代理模式:静态代理、动态代理、Cglib代理。
静态代理:
public interface Subject { public void request(); }
public class ConcreteSubject implements Subject { @Override public void request() { } }
public class Proxy implements Subject { private Subject subject = null; public Proxy() { this.subject = new Proxy(); } public Proxy(Subject subject) { this.subject = subject; } @Override public void request() { this.before(); this.subject.request(); this.after(); } private void before() { //do something } private void after() { //do something } }
动态代理
class MyInvocationHandle implements InvocationHandler{ private Object target; public void setTarget(Object target) { this.target = target; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { //do something method.invoke(target, args); //do something return null; } }
Cglib代理
public class MyMethodInterceptor implements MethodInterceptor{ @Override public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable { Object object = proxy.invokeSuper(obj, args); return object; } }
《设计模式:可复用面向对象软件的基础》
原文:https://www.cnblogs.com/diameter/p/13176597.html