java代码实现设计模式之代理模式
2020-04-06 16:03:02来源:博客园 阅读 ()
java代码实现设计模式之代理模式
/* 代理模式
*
* 生活中:
* (1)自己不方便做一些事情,例如:去国外 找代购 租房 买房 等等...
* 1、代理模式
* (1)主题接口:要求代理类与被代理类实现同一个接口,例如:DAO接口
* (2)被代理者
* (3)代理者
* 必须持有被代理者的引用
*
* 2、静态代理模式
* 缺点:一个代理类只能替一个代理主题(接口)代理工作
*
* 3、动态代理模式
* 优点:一个代理工作处理器,可以替多个代理主题代理工作,只有代理工作内容一样就可以。
* 需要:
* (1)编写一个代理工作处理器的类,这个类必须实现一个接口InvocationHandler
* (2)用JDK中提供了一个Proxy类,来创建代理类的对象
* (3)调用方法
示例: 静态代理
interface A{
void run();
}
class B implements A{
@Override
public void run() {
for (int i = 0; i < 1000; i++) {
System.out.println(i);
}
}
}
class StaticProxy implements A{
private A a;
public StaticProxy(A a) {
this.a = a;
}
@Override
public void run() {
System.out.println("run方法执行");
long start = System.currentTimeMillis();
a.run();
long end = System.currentTimeMillis();
System.out.println("执行时间:" + (end - start));
System.out.println("run方法执行结束");
}
}
静态代理的使用:new StaticProxy(new B()).run()
示例:动态代理
interface C {
void run();
}
class CImpl implements C{
@Override
public void run() {
System.out.println("C接口的run方法执行中");
}
}
class DynamicProxy implements InvocationHandler {
//被代理的对象
private Object obj;
public DynamicProxy(Object obj){
this.obj = obj;
}
/*
* 参数一:代理类的对象
* 参数二:被代理者要执行的方法
* 参数三:被代理者要执行的方法需要的实参列表
* 这个方法不是程序调用的,是一会执行代理类对象的方法时自动调用
*/
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println(method.getName() + "方法执行");
long start = System.currentTimeMillis();
Object object = method.invoke(obj, args);
long end = System.currentTimeMillis();
System.out.println("执行时间:" + (end - start));
System.out.println(method.getName() + "方法执行结束");
return object ;
}
}
动态代理使用:
public class TestProxy2 {
public static void main(String[] args) {
Class clazz = CImpl.class;
ClassLoader loader = clazz.getClassLoader();
Class[] interfaces = clazz.getInterfaces();
C proxy = (C) Proxy.newProxyInstance(loader, interfaces, new DynamicProxy(clazz));
proxy.run();
}
}
原文链接:https://www.cnblogs.com/dirsoen/p/12642747.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇:JAVA的概述
- 国外程序员整理的Java资源大全(全部是干货) 2020-06-12
- 2020年深圳中国平安各部门Java中级面试真题合集(附答案) 2020-06-11
- 2020年java就业前景 2020-06-11
- 04.Java基础语法 2020-06-11
- DES/3DES/AES 三种对称加密算法实现 2020-06-11
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash