代理模式 proxy代理


代理模式-Proxy【代理模式 proxy代理】概述
代理模式从词语的描述上来就很容易理解,就是不方便做某件事情通过中间人或中间物来帮助完成这件事情就是代理模式 。
举例,内网有一台服务器A提供服务,我的PC没法直接通过外部网络访问到内网,但是内网与外网之间有一台堡垒机这台堡垒机即可以访问外网也可以访问内网,因此我的PC可以通过堡垒机来访问内网服务器A提供的服务,这就是代理模式 。
代理模式的主要角色如下 。
1.抽象主题(Subject)类:通过接口或抽象类声明真实主题和代理对象实现的业务方法 。
2.真实主题(Real Subject)类:实现了抽象主题中的具体业务,是代理对象所代表的真实对象,是最终要引用的对象 。
3.代理(Proxy)类:提供了与真实主题相同的接口,其内部含有对真实主题的引用,它可以访问、控制或扩展真实主题的功能 。
那么我们来看看怎么从程序层面来介绍代理模式 。
类图
同样的我们还是先来看看类图

代理模式 proxy代理

文章插图
代码实现
package proxy;/** * 服务接口 * @author chengjian * @date 2019/9/25 */public interface Service { /** * 服务方法 * @author chengjian * @date 2019/9/25 * @return void */ void requestService();}package proxy;/** * 提供服务实现的服务器 * @author chengjian * @date 2019/9/25 */public class Server implements Service { /** * 服务方法 * @author chengjian * @date 2019/9/25 * @return void */ public void requestService() { System.out.println("服务器提供的服务!"); }}package proxy;public class Proxy implements Service { private Server server; /** * 服务方法 * * @return void * @author chengjian * @date 2019/9/25 */ public void requestService() { if(server==null){ server=new Server(); } preService(); server.requestService(); postService(); } private void preService(){ System.out.println("调用真实请求之前执行"); } private void postService(){ System.out.println("调用真实请求之后执行"); }}package proxy;/** * 代理模式测试 * @author chengjian * @date 2019/9/25 */public class ProxyTest { public static void main(String[] args){ Proxy proxy=new Proxy(); proxy.requestService(); }}
总结
从上面的代码可以看到代理模式是一种很简单但是也很实用的模式,通过代理模式可以把后台的服务隐藏起来通过代理类来访问后台服务,同时可以在代理类中扩展一些额外的业务方法 。例如安全校验、日志记录等

    推荐阅读