代理模式Proxy

     Android中其实有很多代理模式,比如ApplicationThreadNative就有一个ApplicationThreadProxy的代理类。那么什么是“代理”呢?怎么理解代理模式?

    “代理”,这个名词其实一点也不陌生,因为在大学里就有一种以学生为主的兼职代理,比如有的学生会代理某方便面品牌、代理某旅游景点门票销售等等,那么我们就称这些学生为代理角色,学生背后的那些品牌公司就是真实角色,在这种关系里面,学生就是为公司卖产品的,校园里任何其他人买公司的产品都可以直接找那些代理的学生而不用去公司找boss买了,如果代理手里的货卖完了就需要去公司里拿货了,这种流程就是代理直接和公司交流,当然了,像找零这种小事代理可以自己解决就没必要跑公司去换零钱了。

    下面我们用代码来实现这个学生代理卖产品的过程~:

   一、建立规则

    首先公司需要明确一些规则,比如公司对代理的要求有以下几条规则:1.你们要是有货可以直接卖不用来跟我汇报,要是没货就找我来拿,并且一手交钱一手交货。2.我们有活动时会通知你的,你不能擅自做活动。

    好了,公司为代理们规定了以上两条规则,那么这两条规则就需要公司和代理共同遵守,我们用一个IRule类类模拟这个规则的结构,代码如下:

public interface IRule {
	/**
	 * 取货
	 * @param hasGoods  是否有商品
	 * @param number   货物编号
	 * @param money  钱
	 * @return
	 */
	public String getGoods(boolean hasGoods,String number, String money);

	/**
	 * 做广告
	 * 
	 * @return
	 */
	public String ads();
}

二、实现规则

    公司既然制定了规则,那么双方就必须都遵守规则,我们用一个Company表示公司,用Proxy表示代理,且Proxy是Company的内部类:

   

public class Company implements IRule {

	@Override
	public String getGoods(boolean hasGoods, String number, String money) {
		return "已收到" + money + "块钱,泡面已发货";
	}

	@Override
	public String ads() {
		return "本周六做大型促销活动";
	}

	/**
	 * 这是一个代理类
	 * 
	 * @author Administrator
	 *
	 */
	public static class Proxy implements IRule {
		Company mCompany;

		public Proxy() {
			if (mCompany == null) {
				mCompany = new Company();
			}
		}

		@Override
		public String getGoods(boolean hasGoods, String number, String money) {
			if (hasGoods) {
				return "我这还有商品,暂时不需要向公司拿货";
			}
			return mCompany.getGoods(hasGoods, number, money);
		}

		@Override
		public String ads() {
			return mCompany.ads();
		}

		public String getMoney() {
			return "找你五毛";
		}

	}
}
    getGoods()方法就是模拟代理向公司提取获取的过程,一手交钱一手交货啊,ads()就表示公司做广告的过程,该过程只能有公司自己来执行,代理不能擅自执行。

三、测试结果

   

	public static void main(String[] args) {
		// 公司招了一个代理
		Proxy proxy = new Proxy();
		
		//有宅男来买泡面了(高兴)
		String msg = proxy.getGoods(true
				, "123456", "800");
		System.out.println(msg);
		
		//公司要做广告了,这个时候也由代理完成
		String adsmsg = proxy.ads();
		System.out.println(adsmsg);
	}

//==================   以下为打印结果
我这还有商品,暂时不需要向公司拿货
本周六做大型促销活动

 

    当然了,如果在proxy调用getGoods的时候传递参数false,结果就是“已收到800块钱,泡面已发货
本周六做大型促销活动”。最后我们贴出一张图来总结一下:(注:改图引用自http://www.cnblogs.com/mandroid/archive/2011/02/24/1963357.html)

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值