从java 反射看延迟加载(代理模式)(六)——动态代理与静态代理

说实在的,代理模式这个模式我现在闭着眼睛都能写出来,真的是快要看吐了。

一、先看看代理模式的uml图




图讲的很清楚了,我的例子的subject是moveable类里面有move方法,realsubject是tank,proxysubject是timeTankProxy而已。


二、我个人认为:

静态代理就像是下图那样,你要取名字,建好类名,比如timeTankProxy。



 

静态代理的代码怎么实现的呢?


package zhangsisi;

public interface Moveable {
    void move();
}

package zhangsisi;

public class tank implements Moveable{

	@Override
	public void move() {
		System.out.println("这是坦克自己本身做的move行为!");
	}

}

package zhangsisi;

public class timeTankProxy implements Moveable{
   private Moveable tank;

  public timeTankProxy(Moveable tank) {
	super();
	this.tank = tank;
	}
	@Override
	public void move() {
		System.out.println("这是timeTankProxy做的时间分割开始");
		tank.move();
		System.out.println("这是timeTankProsy做的时间分割结束");
	}
}

在客户端是通过new timetankproxy类来实现move方法,所以有时间分割线。

如果你要是给tank加一个日志事件的话需要建立一个logTankProxy.java。。。总之很麻烦。


而动态代理,我们指定,jdkproxy可以帮助我们自动生成你想要的代理类:


Iuser proxy = (Iuser) Proxy.newProxyInstance(Iuser.class.getClassLoader(), new Class[]{Iuser.class}, h);



我刚开始学proxy类的时候,虽然很好用,但是总是觉得弄不懂原理,后来又觉得弄不懂反射,后来又发现它与aop也有关系,这就有意思了。后来找了很多资料来学习,才刚刚了解一下底层代码是如何实现的。

所以我觉得学习关于proxy的实现原理(下一篇博客)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 31
    评论
评论 31
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值