设计模式之代理模式

来源:互联网 发布:组织域名后缀含义 编辑:程序博客网 时间:2024/05/21 20:30

        举例介绍代理模式。

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

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

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

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) */@Overridepublic void sendFlower(String girl) {System.out.println("已将花送达,收花人:" + girl + "。");}}
小苏:

public class XiaoSu implements SendFlower {private FlowerShop flowerShop = new FlowerShop();@Overridepublic 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。已将花送达,收花人:小曼。


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

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

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

0 0
原创粉丝点击