设计模式-代理模式

代理模式相对于其他的设计模式来说比较简单:什么是代理模式呢?我很忙,忙的没空理你,那你要找我呢就先找我的代理人吧,那代理人总要知道被代理人能做哪些事情不能做哪些事情吧,那就是两个人具备同一个接口,代理人虽然不能干活,但是被代理人可以。

这里举个例子是模仿了《您的设计模式》中的经典案例,案例中讲述了一个小故事,就是西门庆、潘金莲、王婆之间的故事,水浒里是这样写的:西门庆被潘金莲用竹竿敲了一下难道,痴迷了,被王婆看到了, 就开始撮合两人好事,王婆作为潘金莲的代理人收了不少好处费 ,那我们假设一下:如果没有王婆在中间牵线,这两个不要脸的能成吗?难说的很!

1、首先要定义一个接口,代理人和被代理人要同时具备这一个接口;

package com.dongl.proxy;

/**
 * 定义一种类型的女人,王婆和潘金莲都属于这个类型的女人
 */
public interface KindWomen {

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

    public void talkWithMan(); //能够交谈
}

2、第二步:让代理人和被代理人同时实现这个接口,并且定义自己的方法;

2.1、首先定义潘金莲属于可爱的女人可以和男生抛媚眼、交谈;

package com.dongl.proxy;

/**
 * 定一个潘金莲是什么样的人
 */
public class PanJinLian implements KindWomen {

    @Override
    public void talkWithMan() {
        System.out.println("潘金莲 和男生交谈-------------");
    }

    @Override
    public void makeEyesWithMan() {
        System.out.println("潘金莲抛媚眼---------------------");
    }
}

2.2、定义一个贾氏也可以和男生抛媚眼、交谈;

package com.dongl.proxy;

/**
 * 定一个贾氏是什么样子的人
 */
public class JiaShi implements KindWomen {
    @Override
    public void makeEyesWithMan() {
        System.out.println("贾氏 抛媚眼--------------");
    }

    @Override
    public void talkWithMan() {
        System.out.println("贾氏 和男生交谈-------------");
    }
}

2.3、王婆这个老狐狸知道自己长得又老又丑没有男人愿意和他触膝长谈,交流人生,但是她有智慧,他见多识广,认识很多女生,可以向男生保媒拉纤;

package com.dongl.proxy;

/**
 * 王婆这个人老聪明了,她太老了,是个男人都看不上,
 * 但是她有智慧有经验呀,她作为一类女人的代理!
 */
public class WangPo implements KindWomen {
    private KindWomen kindWomen;

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

    public WangPo(KindWomen kindWomen) {
        this.kindWomen = kindWomen;
    }


    @Override
    public void makeEyesWithMan() {
        kindWomen.makeEyesWithMan();
    }

    @Override
    public void talkWithMan() {
        kindWomen.talkWithMan();
    }
}

第三步:男主登场,这时奶油小生西门庆来了,被潘金莲用竹竿打了一下,好像是迷上了潘小姐,这一幕恰巧被王婆看见了,然后以代理人的角色出现了,适当收点代理费,把这两个不要脸的戳合在一起了,然后就有了西门庆和潘金莲的交流人生:

package com.dongl.proxy;

/**
 * 定义一个西门庆  这人  喜欢和女生交流心得体会
 * 经常和潘金莲触膝长谈 你侬我侬的样子可真叫人羡慕
 */
public class XiMenQing{
    /**
     * 水浒里是这样写的:西门庆被潘金莲用竹竿敲了一下难道,痴迷了,
     * 被王婆看到了, 就开始撮合两人好事,王婆作为潘金莲的代理人
     * 收了不少好处费,那我们假设一下:
     * 如果没有王婆在中间牵线,这两个不要脸的能成吗?难说的很!
     */
    public static void main(String[] args) {
        WangPo wangPo = new WangPo();
        wangPo.talkWithMan();
        wangPo.makeEyesWithMan();

        /**如果西门庆不单单想和潘金莲成为好朋友 还想和贾氏成为好朋友
         * 这时西门庆又找到了王婆 说:我想和贾氏成为朋友 王婆肯定又收取了一大笔中介费
         * 这时可以调用王婆的有参构造
         */
        WangPo wangPo1 = new WangPo(new JiaShi());
        wangPo1.makeEyesWithMan();
        wangPo1.talkWithMan();
    }
}

到这里代理模式就介绍完了,虽然例子有点污,但是还是很容易理解的。

原文地址:https://www.cnblogs.com/dongl961230/p/13299483.html