jdk代理:
1.抽象主題
package dynamicProxy;

/**
* <ul>
* <li>Title:[SellWine]</li>
* <li>Description: [賣酒接口]</li>
* <li>Copyright 2009 Upengs Co., Ltd.</li>
* <li>All right reserved.</li>
* <li>Created by [Huyvanpull] [2011-8-2]</li>
* <li>Midified by [modifier] [modified time]</li>
* </ul>
* @version 1.0
*/
public interface SellWine
{
public void sell();
}

2.具體主題
package dynamicProxy;

/**
* <ul>
* <li>Title:[WineFactory]</li>
* <li>Description: [type of functional description]</li>
* <li>Copyright 2009 Upengs Co., Ltd.</li>
* <li>All right reserved.</li>
* <li>Created by [Huyvanpull] [2011-8-2]</li>
* <li>Midified by [modifier] [modified time]</li>
* </ul>
* @version 1.0
*/
public class WineFactory implements SellWine
{

/* (non-Javadoc)
* @see proxy.SellWine#sell()
*/
public void sell()
{
System.out.println("wineFactory賣酒.");
}

}

3.代理類
package dynamicProxy;

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

public class DynamicProxy implements InvocationHandler
{
private Object target;
public DynamicProxy(Object realSubject)
{
target = realSubject;
}
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable
{
Object proxyObj = null;
try
{
System.out.println("執行前");
method.invoke(target, args);
System.out.println("執行后");
}
catch(Exception ex)
{
ex.printStackTrace();
}
return proxyObj;
}

}

4.測試類
package dynamicProxy;

import java.lang.reflect.Proxy;

public class Test
{
/**
* 代理模式中的調用
*
* @param args
*/
public static void main(String[] args)
{
SellWine sellWine = new WineFactory();
DynamicProxy dynamicProxy = new DynamicProxy(sellWine);
sellWine = (SellWine) Proxy
.newProxyInstance(sellWine.getClass().getClassLoader(),
new Class[] { SellWine.class }, dynamicProxy);
sellWine.sell();
}
}

動態代理能代理不同的接口.
1.抽象主題


















2.具體主題


























3.代理類

































4.測試類






















動態代理能代理不同的接口.