首页 / 设计模式 / Java设计模式:代理模式
Java设计模式:代理模式
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java设计模式:代理模式,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2461字,纯文字阅读大概需要4分钟。
内容图文
静态代理
代码结构
源码
package com.myspringboot.shejimoshi.daili.jingtai;
public interface Call {
void call();
}
package com.myspringboot.shejimoshi.daili.jingtai;
import java.util.concurrent.TimeUnit;
public class Dog implements Call {
public void call() {
System.out.println("汪汪汪。。。");
try {
TimeUnit.SECONDS.sleep((int)(Math.random()*9));
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
package com.myspringboot.shejimoshi.daili.jingtai;
public class DogLogProxy implements Call {
Call call;
public DogLogProxy(Call call) {
this.call = call;
}
@Override
public void call() {
System.out.println("start...");
call.call();
long end = System.currentTimeMillis();
System.out.println("stop!");
}
}
package com.myspringboot.shejimoshi.daili.jingtai;
public class DogTimeProxy implements Call {
Call call;
public DogTimeProxy(Call call) {
this.call = call;
}
@Override
public void call() {
long start = System.currentTimeMillis();
call.call();
long end = System.currentTimeMillis();
System.out.println(end - start);
}
}
package com.myspringboot.shejimoshi.daili.jingtai;
/**
* 静态代理
*/
public class Main {
public static void main(String[] args) {
new DogLogProxy(
new DogTimeProxy(
new Dog()
)
).call();
}
}
动态代理
jdk(asm)
代码结构
源码
package com.myspringboot.shejimoshi.daili.dongtai.jdk;
public interface Call {
void call();
}
package com.myspringboot.shejimoshi.daili.dongtai.jdk;
public class Dog implements Call {
public void call() {
System.out.println("汪汪汪。。。");
}
}
package com.myspringboot.shejimoshi.daili.dongtai.jdk;
import java.lang.reflect.Proxy;
/**
* 使用jdk的动态代理
*/
public class Main {
public static void main(String[] args) {
// System.getProperties().put("jdk.proxy.ProxyGenerator.saveGeneratedFiles","true");
Dog dog = new Dog();
Call call = (Call) Proxy.newProxyInstance(dog.getClass().getClassLoader(), new Class[]{Call.class}, new MyProxy(dog));
call.call();
}
}
package com.myspringboot.shejimoshi.daili.dongtai.jdk;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
public class MyProxy implements InvocationHandler {
Dog dog;
public MyProxy(Dog dog) {
this.dog = dog;
}
public void before() {
System.out.println("method start..");
}
public void after() {
System.out.println("method stop..");
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
//Arrays.stream(proxy.getClass().getMethods()).map(Method::getName).forEach(System.out::println);
before();
Object obj = method.invoke(dog, args);
after();
return obj;
}
}
内容总结
以上是互联网集市为您收集整理的Java设计模式:代理模式全部内容,希望文章能够帮你解决Java设计模式:代理模式所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。