1.静态模式
第一步:
public abstract class AbsShoping {
public abstract void buy();
}
第二步:实例化子类并发出意向 (想买机票但不愿出门)
public class PersionShop extends AbsShoping{
@Override
public void buy() {
System.out.println("买机票");
}
}
第三步:代理帮忙买机票 但要持有被代理者的对象(身份证PersionShop mpShop)
public class ProxyShoping extends AbsShoping {
private PersionShop mpShop;
public ProxyShoping(PersionShop mpShop) {
this.mpShop = mpShop;
}
@Override
public void buy() {
mpShop.buy();
}
}
第四步:
public class Client {
public static void main(String[] args) {
PersionShop mpShop = new PersionShop();
ProxyShoping proxy = new ProxyShoping(mpShop);
proxy.buy();
}
}
运行结果:买机票
2.动态模式
第一步:
public interface AbsShoping {
public abstract void buy();
}
第二步:
public class PersionShop implements AbsShoping{
@Override
public void buy() {
System.out.println("买机票");
}
}
第三步:和静态模式的唯一区别就在这了静态模式代理者实现的是抽象的购物而这里需要实现InvocationHandler
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class ProxyShoping implements InvocationHandler {
private AbsShoping ob;
private AbsShoping proxy;//该引用将指向被代理的类;
public AbsShoping getProxy() {
return proxy;
}
public ProxyShoping(AbsShoping ob) {
this.ob = ob;
// 动态构造一个代理者
this.proxy = (AbsShoping) Proxy.newProxyInstance(
AbsShoping.class.getClassLoader(),
new Class<?>[] { AbsShoping.class }, this);
}
//调用被代理的类将在invoke方法执行
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
Object result = method.invoke(ob, args);
return result;
}
}
第四步:
public class Client {
public static void main(String[] args) {
AbsShoping proxy = new ProxyShoping(new PersionShop()).getProxy();
proxy.buy();
}
}
运行结果:买机票
1076

被折叠的 条评论
为什么被折叠?



