等歌手唱完了,再汇报一下。在歌手休息前,汇报一下,之后再汇报一下。其中:代理人的汇报,就相当于我们添加的代理逻辑。在Handler的invoke方法中可以根据不同的方法添加不同的代理对象。
1.Sing接口
/* * $filename: Sing.java,v $ * $Date: 2013-11-16 $ * Copyright (C) ZhengHaibo, Inc. All rights reserved. * This software is Made by Zhenghaibo. */ package edu.njupt.zhb; /* *@author: ZhengHaibo *web: http://blog.csdn.net/nuptboyzhb *mail: [email protected] *2013-11-16 Nanjing,njupt,China */ public interface Sing { public void say(String content);//唱歌 public void rest();//休息 }
/* * $filename: Singer.java,v $ * $Date: 2013-11-16 $ * Copyright (C) ZhengHaibo, Inc. All rights reserved. * This software is Made by Zhenghaibo. */ package edu.njupt.zhb; /* *@author: ZhengHaibo *web: http://blog.csdn.net/nuptboyzhb *mail: [email protected] *2013-11-16 Nanjing,njupt,China */ public class Singer implements Sing{ @Override public void say(String content) { // TODO Auto-generated method stub System.out.println("I am a singer, I want to sing a song ."+content); } @Override public void rest() { // TODO Auto-generated method stub System.out.println("I want to hava a rest..."); } }
/* * $filename: SingerBrokerHandler.java,v $ * $Date: 2013-11-16 $ * Copyright (C) ZhengHaibo, Inc. All rights reserved. * This software is Made by Zhenghaibo. */ package edu.njupt.zhb; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; /* *@author: ZhengHaibo *web: http://blog.csdn.net/nuptboyzhb *mail: [email protected] *2013-11-16 Nanjing,njupt,China */ public class SingerBrokerHandler implements InvocationHandler { Object target; public SingerBrokerHandler(Object target){ this.target = target; } @Override public Object invoke(Object proxy, Method method, Object[] args)throws Throwable { // TODO Auto-generated method stub if(method.getName().equals("say")){ System.out.println("代理人:歌手开始唱歌了..."); method.invoke(target,"代理人:歌曲的名字是:风吹麦浪...");//调用被代理对象的方法 System.out.println("代理人:歌手唱歌结束了,大家散伙吧..."); }else if(method.getName().equals("rest")){ System.out.println("代理人:歌手需要休息了..."); method.invoke(target);//调用被代理对象的方法 System.out.println("代理人:歌手休息好了..."); } return null; } }
/* * $filename: TestProxy.java,v $ * $Date: 2013-11-16 $ * Copyright (C) ZhengHaibo, Inc. All rights reserved. * This software is Made by Zhenghaibo. */ package edu.njupt.zhb; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Proxy; /* *@author: ZhengHaibo *web: http://blog.csdn.net/nuptboyzhb *mail: [email protected] *2013-11-16 Nanjing,njupt,China */ public class TestProxy { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Singer singer = new Singer(); InvocationHandler invocationHandler = new SingerBrokerHandler(singer); Sing singProxy = (Sing)Proxy.newProxyInstance(Sing.class.getClassLoader(), new Class[] { Sing.class }, invocationHandler); singProxy.say("我说了也没用...代理人让我唱啥我唱啥!"); singProxy.rest(); } }
代理人:歌手开始唱歌了... I am a singer, I want to sing a song .代理人:歌曲的名字是:风吹麦浪... 代理人:歌手唱歌结束了,大家散伙吧... 代理人:歌手需要休息了... I want to hava a rest... 代理人:歌手休息好了...