一文读懂什么是Java代理模式 - 极悦
首页 课程 师资 教程 报名

一文读懂什么是Java代理模式

  • 2022-05-18 10:14:19
  • 501次 极悦

什么是Java代理模式?极悦小编给大家举几个例子。

静态代理

我们定义一个接口并使用代理模式。我们要做的就是在调用这个Java接口的实现类的时候给这个方法添加函数。

public interface HelloInterface {
    void sayHello();
}

接下来是这个接口的实现类。当我们调用sayhello时,我们输出了一个句子:

public class Hello implements HelloInterface{
    @Override
    public void sayHello() {
        System.out.println("hello world");
    }
}

然后我们设计代理类:

/**
 *Static proxy
 */
public class StaticHelloProxy implements HelloInterface{
    private HelloInterface helloInterface = new Hello();
    @Override
    public void sayHello() {
        System.out.println("say hello before invoke");
        helloInterface.sayHello();
        System.out.println("say hello after invoke");
    }
}

这样,我们就实现了一个静态代理。statichelloproxy 类代理 Hello 类。它还扩展了方法的功能。

动态代理

刚才我们发现静态代理有问题。statichelloproxy代理只能代理hello。如果还有其他类需要代理,我们就需要更多的代理类,这不是我们想要的。那么你可以在同一个班级委派更多班级吗?其实可以通过反射来完成。

public class ProxyHandle implements InvocationHandler {
    private Object object;
    public ProxyHandle(Object object) {
        this.object = object;
    }
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("say hello before invoke" + method.getName());
        method.invoke(object, args);
        System.out.println("say hello after invoke" + method.getName());
        return  null;
    }
}

我们定义了一个proxyhandle,在构造方法中传入需要的对象,通过Java反射调用方法。当然,叫法不同。

public static void main(String[] args) {
        HelloInterface helloInterface = new Hello();
        InvocationHandler handler = new ProxyHandle(helloInterface);
        HelloInterface proxyHello = (HelloInterface) Proxy.newProxyInstance(helloInterface.getClass().getClassLoader(),helloInterface.getClass().getInterfaces(),handler);
        proxyHello.sayHello();
    }

这样就实现了动态代理。

选你想看

你适合学Java吗?4大专业测评方法

代码逻辑 吸收能力 技术学习能力 综合素质

先测评确定适合在学习

在线申请免费测试名额
价值1998元实验班免费学
姓名
手机
提交