java设计模式-代理模式(二)

Proxy代理模式是一种结构型设计模式,主要解决的问题是:在直接访问对象时带来的问题,其目的就是为其他对象提供一个代理以控制对某个对象的访问。
为了保持行为的一致性,代理类和委托类通常会实现相同的接口,所以在访问者看来两者没有丝毫的区别。从而在设计上获得了更大的灵活性 如此便于在目标实现的基础上增加额外的功能操作,前拦截,后拦截等,以满足自身的业务需求,同时代理模式便于扩展目标对象功能的特点也为多人所用。
在这里插入图片描述

下面我们还是用通俗易懂的方式理解代理模式
什么是代理模式呢?我很忙,忙的没空理你,那你要找我呢就先找我的代理人吧,那代理人总要知道被代理人能做哪些事情不能做哪些事情吧,那就是两个人具备同一个接口,代理人虽然不能干活,但是被代理的人能干活呀。
比如西门庆想happy一下,于是恰好碰上潘,可以怕引人耳目,找潘金莲,那潘金莲不好意思答复呀,咋办,找那个王婆做代理(还有假如你想开一场刘德华的演唱会,你直接去找华仔,华仔不一定见你(很忙的),所以你找华仔的经纪人,就能协调时间。)
表现在程序上是这样的,先定义一种类型的女人:

/**
 * "嗨"类型的女人
 */
public interface HighWomen {
    /**
     * 此类型的人都能"嗨"
     * */
    public void high();
}

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

/**
 * 潘金莲(被代理对象)
 */
public class Panjinlian implements HighWomen{
    @Override
    public void high() {
        System.out.println("pan jin lian 正在嗨");
    }
}

代理对象和被代理对象实现相同的接口

/**
 * 王婆(代理对象)
 */
public class WangPo implements HighWomen{
    private HighWomen highWomen;

    public WangPo(){
        //默认代理了潘
        this.highWomen = new Panjinlian();
    }

    public WangPo(HighWomen highWomen){
        //还可以代理别的嗨的女人
        this.highWomen = highWomen;
    }

    @Override
    public void high() {
        highWomen.high();
    }
}

两个女主角都上场了,男主角也该出现了

/**
 * 西门官人才是真正需要"嗨"的人
 */
public class XiMenQ {
    public static void main(String[] args) {
        //西门官人需要“嗨”,就找王婆
        WangPo wangPo = new WangPo();
        //看似调用王婆的嗨,实际上幕后是调用潘在嗨
        wangPo.high();
    }
}

表面看起来西门庆是联系王婆,实际幕后是王婆作为潘金莲的代理人,活生生的一个例子,通过代理人实现了某种目的,如果真去掉王婆这个中间环节,直接是西门庆和潘金莲勾搭,估计很难成就武松杀嫂。
某一天西门庆觉得玩腻了,就找王婆问还有别的吗?然后王婆灵机一动,卢俊义的老婆贾氏同样的类型。出场

public class JiaShi implements HighWomen{
    @Override
    public void high() {
        System.out.println("卢俊义的老婆贾氏在嗨。。。");
    }
}

西门庆再次出场:

public class XiMenQ {
    public static void main(String[] args) {
        //西门官人需要“嗨”,就找王婆
        WangPo wangPo = new WangPo();
        //看似调用王婆的嗨,实际上幕后是调用潘在嗨
        wangPo.high();
        //如果有一天,西门官人玩腻了潘,想换一个人,让王婆联络别的"嗨"的女人
        //王婆幕后找了贾氏
        wangPo = new WangPo(new JiaShi());
        wangPo.high();
    }
}

说完这个故事,那额总结一下,代理模式主要使用了Java的多态,干活的是被代理类,代理类主要是接活,你让我干活,好,我交给幕后的类去干,你满意就成,那怎么知道被代理类能不能干呢?同根就成,大家知根知底,你能做啥,我能做啥都清楚的很,同一个接口。思考下现实有没有这样的场景,就可以使用代理模式。
其实这是所谓的静态代理,动态代理后面会写。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值