代理模式:假设一个场景,你的公司是一位软件公司,你是一位软件工程师,显然客户带着需求不会去找你谈,而是去找商务谈,此时商务就代表公司。
商务的作用:商务可以谈判;也有可能在开发软件之前就谈失败,此时商务就会根据公司规则去结束和客户的关系,这些都不用软件工程师来处理。
代理对象的作用:在真实对象访问之前或者之后加入对应的逻辑,或者根据其他控制是否使用真实对象,这个例子就是商务控制了客户对软件工程师的访问。客户就是程序中的调用者,商务就是代理对象,软件工程师就是真是对象
1.定义接口

public interface HelloWorld {
    public void sayHelloWorld();
}

2.创建实现类实现接口

package cn.batis.impl;

import cn.batis.interfaces.HelloWorld;

public class HelloWorldImpl implements HelloWorld {
    public void sayHelloWorld() {
        System.out.println("hello world!");
    }
}

3.建立代理对象和真实对象之间的关系(bind方法)
4.实现代理逻辑方法(invoke方法)

package cn.batis.proxy;

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

public class JDKProxyExample implements InvocationHandler {
    //真实对象
    private Object target=null;

    /**
     * 建立代理对象和真实对象的代理关系,并返回代理对象
     * @param target 真实对象
     * @return  代理对象
     */
    public Object bind(Object target){
        this.target=target;
        return Proxy.newProxyInstance(target.getClass().getClassLoader(),target.getClass().getInterfaces(),this);
    }
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("进入代理逻辑方法");
        System.out.println("在调度真实对象之前的服务");
        Object obj = method.invoke(target, args);
        System.out.println("在调度真实对象之后的服务");

        return obj;
    }
}
posted on 2020-10-18 15:44  凸凸大军的一员  阅读(46)  评论(0编辑  收藏  举报