再来举个栗子
公司代理IPadMini转了一些钱,董事会Apple的产品挺靠谱,决定进一步把公司搞大,开一个Apple的专卖店
//所有苹果公司的产品(抽象主题角色)
interface AppleProduction {
public void theProduction();
}
//加盟Apple专卖店(代理主题角色)
class MyLeagueCompany implements InvocationHandler {
private AppleProduction production;
public MyLeagueCompany(AppleProduction production) {
this.production = production;
}
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
//打印出该顾客对哪一款产品感兴趣
System.out.println(production);
System.out.println("method=" + method.getName());
System.out.println("卖掉一台设备");
//调用实际方法
return method.invoke(production, args);
}
}
//测试
public class DynamicProxyTest {
/**
* @param args
*/
public static void main(String[] args) {
AppleProduction fans1 = new MacFans();
//所有代理类都扩展于Proxy类
AppleProduction proxy1 = (AppleProduction) Proxy.newProxyInstance(
MacFans.class.getClassLoader(),
new Class[] { AppleProduction.class }, new MyLeagueCompany(
fans1));
proxy1.theProduction();
AppleProduction fans2 = new IPadFans();
AppleProduction proxy2 = (AppleProduction) Proxy.newProxyInstance(
IPadFans.class.getClassLoader(),
new Class[] { AppleProduction.class }, new MyLeagueCompany(
fans2));
proxy2.theProduction();
}
}
对于Apple的产品不同的人有不同的需求,他们都实现了AppleProduction接口,他们都想买苹果Apple的产品,所以就找到了Apple专卖店类MyLeagueCompany,专卖店类MyLeagueCompany要想得到卖所有产品的专卖权,就必须跟Apple总部签署合同(实现接口InvocationHandler),苹果公司规定每一样产品必须陈列出来让用户体验(实现接口InvocationHandler的invoke方法),只有用户体验到了才有可能掏自己的钱包。。。。。。