首页 > 其他 > 详细

代理模式

时间:2020-06-22 19:29:32      阅读:74      评论:0      收藏:0      [点我收藏+]

名称:

     代理模式(Proxy Pattern)-结构型

 

问题:

The Proxy design pattern Provides a surrogate or placeholder for another object to control access to it.

 

解决方案:

    

1、 模式的参与者

    1、Proxy

    -保存一个引用使得代理可以访问实体。若RealSubject和Subject的接口相同,Proxy会引用Subject。

    -提供一个与Subject的接口相同的接口,这样代理就可以用来替代实体。

    -控制对实体店存取,并可能负责创建和删除它。

    -其他功能依赖于代理的类型。

    2、Subject

    -定义RealSubject和Proxy 的共用接口,这样就在任何使用RealSubject的地方都可以使用Proxy。

    3、RealSubject

     -定义Proxy所代表的实体。

2.实现方式

    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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!