静态代理举例
interface ClothFactory{
void productCloth();
}
class ProxyClothFactory implements ClothFactory{
private ClothFactory factory;
public ProxyClothFactory(ClothFactory factory) {
this.factory = factory;
}
@Override
public void productCloth() {
System.out.println("我是衣服代理类");
factory.productCloth();
System.out.println("代理工厂后续工作");
}
}
class NickClothFactory implements ClothFactory{
@Override
public void productCloth() {
System.out.println("Nick工厂生产衣服");
}
}
public class StaticProxy {
public static void main(String[] args) {
NickClothFactory nickClothFactory=new NickClothFactory();
ProxyClothFactory proxyClothFactory = new ProxyClothFactory(nickClothFactory);
proxyClothFactory.productCloth();
}
}
动态代理举例
interface Human{
int getAge();
String getName();
}
class GDPeople implements Human{
private int age;
private String name;
public GDPeople(int age, String name) {
this.age = age;
this.name = name;
}
@Override
public int getAge() {
return age;
}
@Override
public String getName() {
return name;
}
}
class ProxyFactory{
public static Object getProxyInstance(Object obj){
MyInvocationHandler handler=new MyInvocationHandler();
handler.bind(obj);
return Proxy.newProxyInstance(obj.getClass().getClassLoader(),obj.getClass().getInterfaces(),handler);
}
}
class MyInvocationHandler implements InvocationHandler {
private Object object;
public void bind(Object object){
this.object=object;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
Object invoke = method.invoke(object, args);
return invoke;
}
}
public class ProxyTest {
public static void main(String[] args) {
GDPeople gdPeople=new GDPeople(15,"Tom");
Human proxyInstance = (Human) ProxyFactory.getProxyInstance(gdPeople);
int age = proxyInstance.getAge();
String name = proxyInstance.getName();
System.out.println("name:"+name+"-----age:"+age);
}
}