假定场景: 美国NASA和Mask公司都有航天技术。mask又是nasa在市面上的代理人。所以我们可以如下设计程序
1、实现Space接口
public interface Space { void spaceTech(); }
2、Nasa实现航天技术接口
import java.lang.reflect.Proxy; public class Nasa implements Space{ @Override public void spaceTech() { System.out.println("美国航天NASA技术"); } public static void main(String[] args) { Nasa nasa = new Nasa(); Space space = (Space) Proxy.newProxyInstance(Space.class.getClassLoader(), new Class[]{Space.class}, new Mask(nasa)); space.spaceTech(); } }
3、Mask实现 InvocationHandler 动态代理
import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; public class Mask implements InvocationHandler { private Space space; public Mask(Space space) { this.space = space; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("开始前"); Object invoke = method.invoke(space,args); System.out.println("开始后"); return invoke; } }