设计模式之代理模式

        举例介绍代理模式。

        话说今天白色情人节,小苏喜欢的妹子小曼远在北京,而小苏在上海,要在今天这个特殊的日子里送她一束花,如何送呢?只能是联系北京的花店,预订一束花,让花店帮忙送给心爱的小曼。

        小曼收到花,是小苏送的,而完成送花的过程,则是花店代理。在这里,花店是代理者,小苏则是被代理对象。小苏要做的只是挑选一束鲜花,告诉花店地址,付给花店费用,然后花店就会将花送到小曼手中。整个过程完成的效果则是,小苏送了小曼一束花,小曼很开心。

        小苏要送花,花店可以将花送到小曼手中,小苏和花店均实现了送花的接口。

public interface SendFlower {
	public void sendFlower(String girl);
}
花店:

public class FlowerShop implements SendFlower {
	
	/*
	 * 此方法只是为了模拟现实
	 */
	public void postAddress(String info) {
		System.out.println("已收到收花人信息:" + info + "。");
	}
	
	/*
	 * 此方法只是为了模拟现实
	 */
	public void pay(int cash) {
		System.out.println("已收到服务费用¥" + cash + "。");
	}

	/*
	 * 代理方法
	 * @see com.sj.pattern.proxy.SendFlower#sendFlower(java.lang.String)
	 */
	@Override
	public void sendFlower(String girl) {
		System.out.println("已将花送达,收花人:" + girl + "。");
	}

}
小苏:

public class XiaoSu implements SendFlower {
	private FlowerShop flowerShop = new FlowerShop();
	@Override
	public void sendFlower(String girl) {
		flowerShop.postAddress("北京市朝阳区三里屯,小曼,电话:185****0624");
		flowerShop.pay(260);
		flowerShop.sendFlower(girl);
	}

}

小苏送花给小曼:

public class Main {

	public static void main(String[] args) {
		XiaoSu gentleMan = new XiaoSu();
		gentleMan.sendFlower("小曼");
	}

}
输出:

已收到收花人信息:北京市朝阳区三里屯,小曼,电话:185****0624。
已收到服务费用¥260。
已将花送达,收花人:小曼。


        代理模式和适配器模式的区别:

        代理模式:被代理对象的具体操作是由代理对象来完成的。也就是被代理对象要完成的动作它自己不能直接来完成,比如人在上海,要给北京的姑娘送花,就交给北京的花店,也就是代理对象来完成。

        适配器模式:主要用于需要做兼容性处理的场合,比如欧标的插头是不能直接插在国标的插板上的,这时有一个转换器,可以让欧标的插头间接的插在国标的插板上。

发布了150 篇原创文章 · 获赞 7 · 访问量 28万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览