概述
代理模式从词语的描述上来就很容易理解,就是不方便做某件事情通过中间人或中间物来帮助完成这件事情就是代理模式。
举例,内网有一台服务器A提供服务,我的PC没法直接通过外部网络访问到内网,但是内网与外网之间有一台堡垒机这台堡垒机即可以访问外网也可以访问内网,因此我的PC可以通过堡垒机来访问内网服务器A提供的服务,这就是代理模式。
代理模式的主要角色如下。
1.抽象主题(Subject)类:通过接口或抽象类声明真实主题和代理对象实现的业务方法。
2.真实主题(Real Subject)类:实现了抽象主题中的具体业务,是代理对象所代表的真实对象,是最终要引用的对象。
3.代理(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();
}
}
总结
从上面的代码可以看到代理模式是一种很简单但是也很实用的模式,通过代理模式可以把后台的服务隐藏起来通过代理类来访问后台服务,同时可以在代理类中扩展一些额外的业务方法。例如安全校验、日志记录等
版权声明:我们致力于保护作者版权,注重分享,被刊用文章【proxy代理(代理模式)】因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!;
工作时间:8:00-18:00
客服电话
电子邮件
beimuxi@protonmail.com
扫码二维码
获取最新动态
