设计模式-代理模式

在开始讲解代理模式之前,先来了解下“代理”的概念,博主之前在大学的时候做过考研代理,下面以考研代理为例子,简单说下代理的概念。
首先,学校有很多的考研机构,这些考研机构,博主选择的是文都考研(当然,不是我选择他,是别人介绍的);
其次,我的工作职责是在全校范围内寻找考研的,并且有报考研班需求的同学,并为他们办理报班手续(当然,可以从中抽点百分点提成);
最后,有考研需求的学生通过我张贴的广告联系到我(给我赚钱的机会)。

在以上的例子中,我干的活就是作为一个“代理”需要做的事情,考研机构就是被我代理的对象,给我赚钱机会的同学是我服务的对象。
因此,代理,其实就是相当于一个中介的作用,例如你过年回家,你爸妈给你找媒婆介绍对象一样,媒婆就起到代理的作用,“不用被代理对象亲自出马与你未来的媳妇进行接触”

好了,知道了代理的概念,下面正式开始介绍代理模式的基础内容及使用。

1.认识代理模式

代理模式作为23种设计模式的结构型模式,关注点是类与对象之间的组合,用于描述将类或对象按照某种布局组成更大的结构。代理模式可以分为静态代理模式和动态代理模式两种,二者的差别挺大,不过,在思想上都是一样的,都是起到一种中介的作用。
公众号“愚公要移山”中有这样一个例子挺好的,他是以租房子为例做了一个代理模式的介绍,这里也是借用他这个例子来进一步说明。(文章末尾会标记出引用的公众号文章链接)。

1.1代理模式的作用

面试中经常会被问道为什么使用代理模式的问题,这里说下两点:
(1)可以隐藏目标的具体实现,以租房子为例,中介负责把房子租出去,租客与房东并没有直接的联系,这样对房东的隐私及信息得到了一定的安全性。
(2)可以在不修改被代理类代码的情况下,对其进行增加新的功能。例如,房东给房子的定价为1000元/月,而中介出售的价格在房东给的价格上增加了500块,在给房东结算后,剩余的500块就成为了中介的额外收入,这就是所谓的“新功能”

2.代理模式的实现

2.1静态代理
2.1.1静态代理的概念

静态代理,就是静态的,在程序运行期间,一旦创建,就不允许修改,或者说很难修改。
例如,如果代理类在程序运行之前就已经存在,那么这总代理方式就被称为静态代理,通常情况下,静态代理类与被代理的类都实现同一个接口,或者派生自同一父类。

2.1.2静态代理的代码实现

(1)定义代理类与被代理类需要共同实现的接口
在这里插入图片描述
(2)被代理类(房东)
在这里插入图片描述
(3)代理类(中介)
在这里插入图片描述
(3)测试类
在这里插入图片描述
分析:静态代理类的特点是,代理类与被代理类实现相同的接口,在代理类实现的方法中,一方面需调用被代理类的实现方法,并且,可以根据自身的需求进行扩展,例如图中的在调用被代理类方法之前和之后输出的收500中介费的问题,这就是代理模式的第二点作用的体现

2.2动态代理

动态代理的基本概念和使用打算另外进行具体说明,包括JDK包含的动态代理和cjlib动态代理,是各种框架源码的常客。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值