关于Java动态代理

来源:互联网 发布:数据挖掘知乎 编辑:程序博客网 时间:2024/05/22 18:49

再来举个栗子

公司代理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方法),只有用户体验到了才有可能掏自己的钱包。。。。。。

原创粉丝点击