梦幻之旅

DEBUG - 天道酬勤

   :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  671 随笔 :: 6 文章 :: 256 评论 :: 0 Trackbacks
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();
    }

}


动态代理能代理不同的接口.
posted on 2011-08-02 16:12 HUIKK 阅读(325) 评论(0)  编辑  收藏 所属分类: Design Patterns

只有注册用户登录后才能发表评论。


网站导航: