2021腾讯云限时秒杀,爆款1核2G云服务器298元/3年!(领取2860元代金券),
地址:https://cloud.tencent.com/act/cps/redirect?redirect=1062
2021阿里云最低价产品入口+领取代金券(老用户3折起),
入口地址:https://www.aliyun.com/minisite/goods
相关推荐:设计模式之---代理模式(Proxy Pattern)
场景 现实世界中,秘书就相当于一个代理,老板开会,那么通知员工开会时间、布置会场、会后整理会场等等开会相关工作就可以交给秘书做,老板就只需要开会就行了,不需要亲自做那些事。同理,在我们程序设计中也可使用代理模式来将由一系列无关逻辑组合在一起
- 静态代理

package com.iter.devbox.staticProxy; public interface Star { public void sing(); }
package com.iter.devbox.staticProxy; public class RealStar implements Star { @Override public void sing() { System.out.println(this.getClass().getName() + ".sing()"); } }
package com.iter.devbox.staticProxy; public class StarHandler implements Star { private Star realStar; public StarHandler(Star realStar) { super(); this.realStar = realStar; } @Override public void sing() { System.out.println(this.getClass().getName() + ".sing() 执行之前"); realStar.sing(); System.out.println(this.getClass().getName() + ".sing() 执行之后"); } }
package com.iter.devbox.staticProxy; public class Client { public static void main(String[] args) { new StarHandler(new RealStar()).sing(); } }
- 动态代理

package com.iter.devbox.dynamicProxy; public interface Star { public void sing(); }
package com.iter.devbox.staticProxy; public class RealStar implements Star { @Override public void sing() { System.out.println(this.getClass().getName() + ".sing()"); } }
package com.iter.devbox.dynamicProxy; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; public class StarHandler implements InvocationHandler { Object star; public StarHandler(Object star) { super(); this.star = star; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("代理方法执行前"); Object obj = method.invoke(star, args); System.out.println("代理方法执行后"); return obj; } }
package com.iter.devbox.dynamicProxy; import java.lang.reflect.Proxy; public class Client { public static void main(String[] args) { Star realStar = new RealStar(); // 调用处理器 StarHandler handler = new StarHandler(realStar); // 利用JDK动态代理生成代理类接口 Star star = (Star) Proxy.newProxyInstance(ClassLoader.getSystemClassLoader(), new Class[]{Star.class}, handler); star.sing(); } }