常用的设计模式有23种,但是最常见的设计模式却只有七八种,今天我们就来说说最常见的设计模式之一的代理模式。代理模式的核心思想用一句话概述就是:保护被代理的对象,控制访问。
用一句话概述代理模式很简单,但是实际做起来很多同学可能还是不理解代理模式的应用场景,我们今天就用邓哥的例子来说说代理模式究竟是怎么样的~
话说邓哥的四大爱好是抽烟、喝酒、烫头、浪~邓哥出名之后,邓嫂就开始对邓哥严加管教,邓嫂开始充当起了邓哥经纪人的角色~
代理模式很像是经纪人和明星之间的关系,经纪人的重要功能之一就是做一个filter(拦截器),帮助明星挡住外面很多的事情,以达到保护明星的作用。
我们的代理模式也是这样,把原本的对象或者接口保护在里面,不然别人直接访问到,在访问之前要经过重重的过滤,以此来达到保护接口的作用。
这个时候,如果我们想约邓哥出来玩,邓嫂就会果断的拒绝我们~这个消息都不会传到邓哥那里~
在我们的系统中,有很多比较重要的接口需要进行这样的保护,比如支付类接口、用户登录接口等涉及到钱或者用户信息相关的敏感接口,除了接口本身需要有良好的防御能力之外,通常还会有相应的代理来对接口进行保护。
如果来访问的请求参数是异常的就直接返回,不用访问后面的真正接口,从而达到保护接口的目的。
如果我们问的问题是可以让邓哥处理的,邓嫂就会把消息告诉邓哥,然后邓哥再进行处理。
也就是说,代理模式只是多了一个环节在中间进行传递和过滤,但是真正来做操作的还是后面的接口。
当邓哥需要和我们带沟通的时候,邓哥也需要把事情告诉邓嫂,然后通过邓嫂来告诉我们。
也就是说,当我们调用一个代理的方法的时候,运行结果也是由代理方法来返回给我们的,我们不但在发出请求的时候不会和邓哥直接沟通,在接收响应的时候也不会直接和邓哥直接交流。
这样一来邓哥就完全的被邓嫂包围(保护)了,代理模式的原则就是这样,将原接口或者原对象严格的保护起来,不让其与外界进行直接接触,以控制访问的方式来对后面的接口和对象进行保护。
可能有一些同学会觉得代理模式和装饰模式比较像,都是将一个接口封装在另一个函数里面。那么我们如何来区别什么情况下是装饰模式?什么情况下是代理模式呢?
这个时候就需要大家记住各个设计模式的关键词了~装饰模式的关键词是:封装,扩展。代理模式的关键词是:控制,保护。
也就是说,装饰模式主要的目的是把原接口封装在新的接口里之后加入新的功能,所以关键词是扩展。但是代理模式的关键词是保护,也就是说代理模式不会对功能进行增益扩充,只是要对接口进行保护。