JDK代理模式(静态、动态)

public interface Buy {

    void buy(String name);
}

public class Person implements Buy{
    
    @Override
    public void buy(String name) {
        System.out.println(this.getClass().getName() + " buy " + name);
    }

}

public class BuyProxy implements Buy {
    
    private Person person;
    
    /**
     * @param person
     */
    public Proxy(Person person) {
        super();
        this.person = person;
    }

    @Override
    public void buy(String name) {
        person.buy(name);
    }

    public static void main(String[] args) {
        Person p = new Person();
        BuyProxy proxy = new BuyProxy(p);
        proxy.buy("NIKE");
    }
}
public class DynamicProxy implements InvocationHandler{

    private Object p;
    
    public DynamicProxy(Object p) {
        super();
        this.p = p;
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("before invoke ...");
        method.invoke(p, args);
        System.out.println("after invoke ...");
        return null;
    }
    
    public static void main(String[] args) {
        Person p = new Person();
        DynamicProxy dp = new DynamicProxy(p);
        Buy buy = (Buy)java.lang.reflect.Proxy.newProxyInstance(p.getClass().getClassLoader(),p.getClass().getInterfaces(),dp);
        buy.buy("NIKE");
    }

}

 


 

posted @ 2016-04-06 15:17  项磊磊  阅读(133)  评论(0)    收藏  举报