[原创]设计模型探索O2-proxy parttern之桃代李疆

[原创]设计模型探索O2-proxy parttern之桃代李疆
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();
    }

}


动态代理能代理不同的接口.

你可能感兴趣的:([原创]设计模型探索O2-proxy parttern之桃代李疆)