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

Posted chxbar.cn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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静态代理和动态代理租房问题的主要内容,如果未能解决你的问题,请参考以下文章

侃侃静态代理和动态代理

Spring之静态/动态代理模式

Java静态代理与动态代理模式的实现

代理模式

设计模式——代理模式

5.Spring:代理模式