设计模式--代理模式

概念:为其他对象提供一种代理,以控制对这个对象的访问(火车票代售处)类似中介,去掉一些服务或者增加一些功能
AOP:再不改变原有类的一些方法的基础上,增加一些额外的业务逻辑
代理模式的几种
1.远程代理:为不同地理的对象提供局域网代表对象
2.虚拟代理:根据需要将资源消耗很大的对象进行延迟,真正需要的时候进行创建(加载今日头条时,文字先加载出来,图片过大而加载缓慢,会出现一个虚拟图片)
3.保护代理:控制用户的访问权限(只有注册了才能发帖,评论等)
4.智能引用代理:提供对目标对象额外服务

代理实现的两种方式:
静态代理:(使用聚合方式
代理和被代理对象在代理之前时确定的,他们都实现相同的接口或者都继承相同的抽象类
动态代理:动态产生代理,实现对不同类,不同方法的代理

使用动态代理,必须实现InvocationHandle接口
这里写图片描述
InvocationHandle是事务处理器


这里写图片描述


这里写图片描述


代码:

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

/**
 * Created by lxq on 2017/9/4.
 */
public class TimeHandle implements InvocationHandler{
    private Object object;

    public TimeHandle(Object object) {
        super();
        this.object = object;
    }

    /**
     *
     * @param proxy 被代理对象
     * @param method 被代理对象的方法
     * @param args 方法的参数
     * @return
     * @throws Throwable
     */
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        /*
        处理业务的逻辑
         */
        method.invoke(object);//传递过来的对象
        /*
        处理业务的逻辑
         */
        return null;
    }
}

测试代码:

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

/**
 * Created by lxq on 2017/9/4.
 */
public class Test1 {
    public static void main(String[] args){
        // Car car = new Car();
        Object object = new Object();
        Class<?> cls = object.getClass();
        InvocationHandler h = new TimeHandle(object);

        /**
         * @param loader 被代理类的类加载器
         * @param interfaces 实现接口
         * @param h InvocationHandle
         */
        //Moveable moveable = (Moveable)
        Proxy.newProxyInstance(cls.getClassLoader(),cls.getInterfaces(),h);
        //moveable.move();
    }
}

JDK动态代理和CGLIB代理的区别:
1.jdk动态代理只能代理实现了接口的类,没有实现接口的类不能实现JDK的动态代理
2.CGLIB是针对类来实现代理的:对制定目标类产生子类(通过继承方式final),通过对方法的重写

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值