关于Java动态代理

再来举个栗子

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值