定义:为其他对象提供一种代理以控制对这个对象的访问。
静态代理:
1.定义一个接口
2.定义一个具体类实现接口
3.定义一个代理类,里面有具体类的引用,并且实现了接口,重写的方法调用了具体类
4使用:调用代理类的重写方法
动态代理:jdk反射生成代理必须面向接口,这是由Proxy的内部实现决定的
1.定义一个接口
2.定义一个具体类实现了接口
3.定义一个代理类实现InvocationHandler接口,里面有接口的引用,有两个代理方法,一个重写方法,重写方法调用了接口引用。
4.使用:通过jdk proxy
Movable m = (Movable)Proxy.newProxyInstance(Tank.class.getClassLoader(),
new Class[]{Movable.class},
new TimeProxy(tank)
);
m.move();