GOF23设计模式02之动态代理模式

前言
由于前面静态代理暴露出一个问题,就是当需要代理的对象越来越多怎么办?于是就有了动态代理。

1.我们首先需要修改Agent.java:

  • 必须实现invocationHandler接口
package com.wei;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;


public class Agent implements InvocationHandler{
	
	private Object target;   //创建万能对象
	
	
	
	public Object getTarget() {  
		
		return target;
		
	}

	public void setTarget(Object target) {  //通过set将被代理的真实对象设置进来
		this.target = target;
	}
	
	public Object getProxyInstance() {  //调用此方法实现代动态理
		
		return Proxy.newProxyInstance(target.getClass().getClassLoader(),target.getClass().getInterfaces(),this);
		
	}


	void init() {
		System.out.println("唱歌开始。。。");
	}
	
	
	void distory() {
		System.out.println("唱歌结束。。。");
	}

	@Override
	public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
		Object object = null;
		init();   //方法增强
		object =  method.invoke(target,args);
		distory(); //方法增强
		return null;
	}

}

2.修改Client代码:

package com.wei;

public class Client {
	public static void main(String[] args) {
		Girl realGirl = new RealGirl();  //创建RealGirl
		
		Agent agent = new Agent();    //创建代理公司
		
		agent.setTarget(realGirl);   //设置对象
		Girl one = (Girl)agent.getProxyInstance();  //调用方法实现动态代理		
		one.sing();		//测试代理

	}	
}


3.附上Girl接口代码和RealGirl实现类的代码:

  • Girl.java
package com.wei;

public interface Girl {
	void sing();
}

  • RealGirl.java
package com.wei;

public class RealGirl implements Girl {
	@Override
	public void sing() {
		System.out.println("RealGirl开始唱歌。。。");		
	}
}

4.最后运行代码:
在这里插入图片描述

  • 成功运行,这样就可以传任意对象进来,动态代理就可以实现代理。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值