`

理_代_态_动

 
阅读更多
/**
* 抽象角色
*/
public interface IHello
{
    void sayHello(String name);
}

/**
* 真实角色
*/
public class Hello implements IHello
{
    @Override
    public void sayHello(String name)
    {
        System.out.println("真实角色的方法 " + name); //$NON-NLS-1$
    }
}

/**
* 代理类 --- 动态代理
*/
public class ProxyHello implements InvocationHandler
{
    Object obj;
   
    /**
     * 构造函数
     * @param obj
     */
    public ProxyHello(Object obj)
    {
        this.obj = obj;
    }
   
    @Override
    public Object invoke(Object proxy, Method method, Object[] args)
            throws Throwable
    {
        System.out.println("在代理方法执行之前"); //$NON-NLS-1$
       
        method.invoke(obj, args);
       
        System.out.println("在代理方法执行之后"); //$NON-NLS-1$
       
        return null;
    }
   
    public static void main(String[] args)
    {
        Hello hello = new Hello();
        ProxyHello pHello = new ProxyHello(hello);
        Class hClass = hello.getClass();
       
        IHello h = (IHello)Proxy.newProxyInstance(hClass.getClassLoader(),
                hClass.getInterfaces(),
                pHello);
        h.sayHello("化为");
    }
}

-----------------------------
/**
* 抽象角色
*/
public interface IHolle
{
    public void sayHello(String name);
}

/**
* 代理类
*/
public class Hello implements IHolle
{
    @Override
    public void sayHello(String name)
    {
        System.out.println("实现类的方法 " + name); //$NON-NLS-1$
    }
}

/**
* 代理类 --- 静态代理
*/
public class ProxyHello implements IHolle
{
    Hello hello;
   
    public ProxyHello(Hello hello)
    {
        this.hello = hello;
    }
   
    @Override
    public void sayHello(String name)
    {
        proRequest();
       
        hello.sayHello(name);
       
        proResponse();
    }
   
    public void proRequest()
    {
        System.out.println("代理之前的处理"); //$NON-NLS-1$
    }
   
    public void proResponse()
    {
        System.out.println("代理之后的处理"); //$NON-NLS-1$
    }
   
    public static void main(String[] args)
    {
        ProxyHello ProxyHello = new ProxyHello(new Hello());
        ProxyHello.sayHello("huawei"); //$NON-NLS-1$
    }
}
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

Global site tag (gtag.js) - Google Analytics