代理模式之动态代理

动态代理模式:解决了静态代理模式的缺点(无需创建多个代理类)




/**

 * 抽象角色  租房的动作
 * */
public interface ITrueHouse {
void request();

}


/**
 * 真实房屋拥有者,最终调用的方法
 * */
public class House implements ITrueHouse {
public void request() {
System.out.println("房子是我的!");
}

}


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


/**
 * 动态代理角色    必须实现InvacationHandler接口
 * */
public class DynamicProxy implements InvocationHandler {
//定于最终执行的类
private Object sub;

public DynamicProxy(Object obj){
this.sub=obj;
}


/**
* method 当前需要执行的方法(其实是有调用方决定的)   args调用该方法需要的参数数组
* */
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
getMoney();
method.invoke(sub, args);//执行该方法    sub表示最终执行的实例   
return null;
}

private void getMoney(){
System.out.println("我是中介,我要收中介费");
}


}


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

public class Client {
public static void main(String[] args) {
House h=new House();
InvocationHandler invocation=new DynamicProxy(h);//实例化代理类
Class<?> classType=invocation.getClass();//获取代理类的class对象
ITrueHouse sub=(ITrueHouse)Proxy.newProxyInstance(classType.getClassLoader(),
h.getClass().getInterfaces(), invocation);//返回一个指定接口的代理类实例,该接口可以将方法调用指派到指定的调用处理程序
sub.request();
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值