当前位置:   article > 正文

GOF--代理模式_gof 代理模式 和代理

gof 代理模式 和代理


前言

代理模式,从这个名字其实就能得出一个内容,肯定不是直接操作某个类,而是通过设置代理人来帮助沟通,或者说做事的。


一、代理设计模式的含义和缺点

代理模式的含义:
  代理模式是指:当某一个类或者对象,不方便直接与外界进行连接,或者说传递数据时,这时候我们就需要设置一个新的类或者对象来作为该类的代理者,代替它完成某些功能,或者说操作。
代理模式的缺点:

  1. 代理模式会造成系统设计中类的数量增加
  2. 在客户端和目标对象之间增加一个代理对象,会造成请求处理速度变慢;
  3. 增加了系统的复杂度

注意:可以使用动态代理模式来解决这些问题

二、代理模式的结构

在这里插入图片描述
这时候一般创建的是静态代理类,因为是在用户创建对象时就已经存在了,这样的话就会有缺点,因为有的时候我们根本不清楚,具体是为哪个类在设置代理类,这时候就可以使用动态代理模式,而动态代理模式的本质其实是用反射的机制来完成操作的。

三、动态代理代码实现

动态代理主要分为两大类:基于接口的动态代理,基于类的动态代理

  1. 基于接口—JDK动态代理
  2. 基于类:cglib
  3. java字节码实现:javasist

代理角色代码:

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

//要求该类实现InvocationHandler接口
public class ProxyInvocationHandler implements InvocationHandler {
    //组合要被代理的接口(因为不清楚具体的类,所有用object 来代替类的属性)
    private Object target;
    public void setTarget(Object target){
        this.target=target;
    }
    //生成得到代理类
    public  Object getProxy(){
        return Proxy.newProxyInstance(this.getClass().getClassLoader(),
                target.getClass().getInterfaces(),this);
    }
    //处理代理实例,并返回结果
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        return null;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

总结

说了一下代理角色的的含义和它类与类之间的组合关系,同时也讲解了代理类的代码。

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号