动态代理模式model(JDK)

代理模式( Proxy Pattern):给某一个对象提供一个代理,并由代理对象控制对原对象的引用。代理模式的英文叫做 Proxy,它是一种对象结构型模式,代理模式分为静态代理和动态代理,我们来介绍动态代

举例

(1)创建一个抽象类, Person接口,使其拥有一个没有返回值的 doSomething方法。

/** * 抽象类人 */
public interface Person { 
	void doSomething();
}

(2)创建一个名为Bob的 Person接口的实现类,使其实现 dosomething方法

/** *创建一个名为Bob的人的实现类 */
public class Bob implements Person { 
	public void doSomething() { 
		System.out.println("Bob doing something!");
	}
 }

(3)创建DK动态代理类,使其实现 InvocationHandler接口。拥有一个名为 target的变量,并创建getTarget获取代理对象方法

/**
* JDK动态代理 
* 需要实现InvocationHandler接口 
*/
public class JDKDynamicProxy implements InvocationHandler {
	// 被代理对象
	Person target;
	// JDKDynamicProxy构造函数
	public JDKDynamicProxy(Person person) { 
		this.target = person;
	}
	// 获取代理对象
	public Person getTarget() {
		return (Person)Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this); 
	}
	// 动态代理invoke方法
	public Person invoke(Object proxy, Method method, Object[] args) throws
	Throwable {
		// 被代理方法前执行
		System.out.println("JDKDynamicProxy do something before!"); 
		// 执行被代理的方法
		Person result = (Person) method.invoke(target, args); 
		// 被代理的方法后执行
		System.out.println("JDKDynamicProxy do something after!"); 
		return result;
	} 
}

创建JDK动态代理测试类 JDKDynamicTest

/**
* JDK动态代理测试
*/
public class JDKDynamicTest { 
	public static void main(String[] args) {
		System.out.println("不是用代理了类,调用doSomething方法"); 
		// 不是用代理类
		Person person = new Bob(); 
		// 调用doSomething方法
		person.doSomething();
		System.out.println("-------------------------------------- 分割线-------------------------------------");
		System.out.println("使用代理类,调用doSomething方法"); 
		// 获取代理类
		Person proxyPerson = new JDKDynamicProxy(new Bob()).getTarget(); 
		// 调用doSomething方法
		proxyPerson.doSomething();
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值