java设计模式——代理模式(动态代理)

本文详细介绍了代理模式的概念及其在Java中的具体实现方式,包括接口定义、汽车类与代理类的实现,以及如何通过代理模式记录汽车行驶的时间。同时,还提供了JDK动态代理、Mybatis动态代理及反射等相关知识的链接。

代理模式:http://yangguangfu.iteye.com/blog/815787

//接口
public interface Moveable {
	void move();
}
//汽车类
public class Car implements Moveable {
	@Override
	public void move() {
		//实现开车
		try {
			Thread.sleep(new Random().nextInt(1000));
			System.out.println("汽车行驶中....");
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
}
//汽车类的代理类
public class CarTimeProxy implements Moveable {
	public CarTimeProxy(Moveable m) {
		super();
		this.m = m;
	}
	private Moveable m;	
	@Override
	public void move() {
		long starttime = System.currentTimeMillis();
		System.out.println("汽车开始行驶....");
		m.move();
		long endtime = System.currentTimeMillis();
		System.out.println("汽车结束行驶....  汽车行驶时间:" 
				+ (endtime - starttime) + "毫秒!");
	}
}

=============================================================================

内部原理:

代理类$proxy有所有的接口里的方法,每个方法的实现都是调用myInvocationHandler的invoke方法:

h.invoke(this,此方法名)

=============================================================================

JDK的动态代理:

https://juejin.im/entry/5b9ccbb9e51d450e9874cc58

Mybatis的动态代理:

https://mp.weixin.qq.com/s?__biz=MzI4OTA3NDQ0Nw==&mid=2455545283&idx=1&sn=305c1bfc2b4878a61897b8e574cd2de7&chksm=fb9cb9a3cceb30b5b16c488baabdf9cbc42891866029a18be0a9e092ebda3726f10b7bcbe078&scene=21#wechat_redirect

反射:

https://wenshixin.gitee.io/blog/2018/09/04/Java%E8%BF%9B%E9%98%B6-%E5%8F%8D%E5%B0%84/

转载于:https://my.oschina.net/u/2286010/blog/655883

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值