设计模式-代理模式

本文通过一个生动的故事介绍了代理模式的概念及其实现方式。以西门庆、潘金莲和王婆为例,展示了如何通过代理类来间接调用目标对象的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

代理模式:我很忙,没空理你,你要找我的代理人。代理人总要知道代理人哪些事情能做哪些事情不能做,那就是两个人具备同一个接口,代理人不能干活,被代理人能干活啊。
例子:西门庆找潘金莲,潘金莲“害羞”啊,咋办,那找代理人啊,嗯,王婆就很合适嘛。

/**
 * Created by xpeng on 2018/4/30.
 * 定义一种类型的女人,王婆和潘金莲都属于这个类型的女人
 */

public interface KindWomen {
    //这种类型的女人能做什么事情呢?
    public void makeEyesWithMan();//抛媚眼

    public void happyWithMan();//这个可有意思了
}

一种类型嘛,那肯定是接口,然后定义潘金莲:

/**
 * Created by xpeng on 2018/4/30.
 * 定一个潘金莲是什么样的人
 */

public class PanJinLian implements KindWomen {

    @Override
    public void makeEyesWithMan() {
        Log.e("xyz"," 小潘抛媚眼 ");
    }

    @Override
    public void happyWithMan() {
        Log.e("xyz"," 那个啥,你懂的 ");

    }
}

在定义一个大大狡猾的老王婆:

/**
 * Created by xpeng on 2018/4/30.
 * 王婆这个人老奸巨猾,她太老咯,是个男人就看不上
 * 但是大大的狡猾啊,所以她作为一类女人的代理!
 */

public class WangPo implements KindWomen {

    private KindWomen kindWomen;

    public WangPo(){
        this.kindWomen = new PanJinLian();
    }

    //他/她可以是KindWomen的任何一个女人的代理,只要你是这一类型
    public WangPo(KindWomen kindWomen){
        this.kindWomen = kindWomen;
    }


    @Override
    public void makeEyesWithMan() {
        this.kindWomen.happyWithMan();//自己嘛那个啥,找年轻人代替
    }

    @Override
    public void happyWithMan() {
        this.kindWomen.makeEyesWithMan();//同理,年纪一大把别吓到别人,造孽啊,找人代替
    }
}

好啦,西门庆大官人闪亮登场

 WangPo wangPo1 = new WangPo();
        wangPo1.happyWithMan();//实际上是小潘哦
        wangPo1.makeEyesWithMan();//小潘
        Log.e("xyz"," 小潘 ");

这就是一个活生生的例子,通过代理人实现某种目的,如果去掉王婆这个代理人的话,西门庆大官人和潘金莲小娘子勾搭还是挺麻烦的,成不成有的说咯。
好,那么问题来了,要是凤姐姐在那个时候,并且和西门庆大官人对上眼了,那我们也可以让王婆代理嘛,嗯,口味稍微有点重咯。

/**
 * Created by xpeng on 2018/4/30.
 * 定义一个西门庆,这家伙,唉,也算是一个人才咯
 */

public class FengJieJie implements KindWomen {

    @Override
    public void makeEyesWithMan() {
      Log.e("xyz"," 凤姐姐抛媚眼咯。。。。。。。。 ");
    }

    @Override
    public void happyWithMan() {
        Log.e("xyz"," 凤姐姐在和西门庆大公子happy啦啦啦啦。。。 ");
    }
}

西门大官人闪亮登场:

       FengJieJie fengJieJie = new FengJieJie();
        WangPo wangPo = new WangPo(fengJieJie);//让王婆作为凤姐姐的代言人

        wangPo.makeEyesWithMan();//实际上是凤姐姐
        wangPo.happyWithMan();//实际上是凤姐姐
        Log.e("xyz","凤姐姐");

总结一下,代理模式主要使用了Java的多态,干活的是被代理类,代理类主要接活,那怎么知道被代理类能不能干呢,同一个借口呗。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值