首页 > 代码库 > 【4.0】静态代理和动态代理【租房问题】

【4.0】静态代理和动态代理【租房问题】

  问题:房东类和中介类都有一个租房的方法,但房东租房一般是让中介代理的,即我们用户一般是通过中介租到房的。那么房东和中介就必须有一个共同的

接口(该接口定义共同的租房方法),而中介类中的租房方法会调用房东类的租房方法,这样用户租房的时候只需要通过调用中介的租房方法便可以间接调

用中介类的租房方法。并且中介类中的租房方法内在调用房东的租房方法前后可以做自己的操作。

 

1.静态代理,过于简单,故略。

2.动态代理:

package reflect;
import java.lang.reflect.*;
 
//定义项目接口
interface Rent {
    public void say(String name, int age);
}
 
// 定义真实项目
class Fangdong implements Rent {
    public void say(String name, int money) {
        System.out.println("中介" + name + "赚了" + money + "元");
    }
}
 
class Zhongjie implements InvocationHandler {
    private Object obj = null;
 
    public Object bind(Object obj) {
        this.obj = obj;
        return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj
                .getClass().getInterfaces(), this);
    }
    
    public Object invoke(Object proxy, Method method, Object[] args)
            throws Throwable {
    	 //  在代理真实对象前我们可以添加一些自己的操作
        System.out.println("before rent house");
        
//        System.out.println("Method:" + method);
        
        //    当代理对象调用真实对象的方法时,其会自动的跳转到代理对象关联的handler对象的invoke方法来进行调用
        method.invoke(this.obj, args);
        
        //  在代理真实对象后我们也可以添加一些自己的操作
        System.out.println("after rent house");
        
        return null;
    }
}
 
public class Test {
    public static void main(String[] args) {
    	Zhongjie demo = new Zhongjie();
        Rent rent_zhongjie = (Rent) demo.bind(new Fangdong());
        rent_zhongjie.say("租房", 2000);
    }
}

  

2.1测试结果

技术分享

 

【4.0】静态代理和动态代理【租房问题】