什么是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大专业测评方法
代码逻辑 吸收能力 技术学习能力 综合素质
先测评确定适合在学习