当前位置: 首页 > news >正文

设计模式(5)代理模式

一、介绍:

【Subject/抽象角色】定义了RealSubject和Proxy的共用接口,这样就可以在任何使用RealSubject的地方都可以使用Proxy

【RealSubject/真实角色】定义Proxy所代表的真实实体

【Proxy/代理角色】保存一个引用使得代理可以访问实体,并提供一个与Subject的接口相同的方法,这样可以用Proxy替换实体。

【Client/客户】访问代理对象的人
 

public interface Subject{public void Request();
}
public class RealSubject implements Subject{@override public void Request(){System.out.println("真实的请求");}
}
public class Proxy implements Subject{RealSubject realSubject;public Proxy(RealSubject realSubject){this.realSubject=realSubject;  }@overridepublic void Request(){realSubject.Request();}
}
main:Proxy proxy = new Proxy(new RealSubject());proxy.Request();

二、应用场景:

1、远程代理:为一个对象在不同的地址空间提供局部代表。可隐藏对象存在不同地址空间的事实。例如ws在.net中的应用。

2、虚拟代理:通过代理来存放实例化需要很长时间的真实对象。例如让一个很大的html页面立即展开,可以通过代理设置图片位置为空,先占位打开页面,然后再慢慢加载图片后填充。

3、安全代理:用来控制真实对象访问时的权限。例如检查真实对象是否有访问权限。

4、智能指引:指调用真实的对象时,代理处理另外一些事。例如计算真实对象的引用次数。

三、举例:

1、租房

(1)租房接口

public interface Rent{public void rent();}

(2)房东

public class Host implements Rent{@Overridepublic void rent(){System.out.println("房东租房");}
}

(3)代理

public class Proxy implements Rent{private Host host;public Proxy(Host host){this.host=host;}@Overridepublic void rent(){host.rent();}//增加额外功能public void see(){System.out.println("看房");}}

(4)客户

public static void main(String[]args){Host host=new Host();Proxy proxy = new Proxy(host);proxy.rent();proxy.see();}

http://www.lryc.cn/news/122503.html

相关文章:

  • Django配置(部署环境较乱,暂时启用)
  • 【设计模式】桥接模式
  • ol问题总结二
  • 批量打印-----jsPDF将图片转为pdf,并合并pdf
  • 【Git】版本控制器详解之git的概念和基本使用
  • C语言 棱形图案
  • 在idea使用GitHub账号、Copilot异常
  • 面试热题(反转字符串中的单词)
  • Stable Diffusion WebUI 从零基础到入门
  • 【uniapp】一文读懂app端安装包升级
  • 【算法题】2518. 好分区的数目
  • 编写守护进程
  • stable-diffusion-webui启动No Python at ‘C:\xxx\xxx\python.exe‘
  • 面试热题(合并两个有序列表)
  • QT生成Word PDF文档
  • 阿里云服务器搭建WordPress建站教程基于Windows系统
  • 动态链接(8/11)
  • Python 之 Http 获取网页的 html 数据,并去掉 html 格式等相关信息
  • 干不完根本干不完,我也不想加班,快来围观时间管理大师
  • 常见设计模式
  • Android之版本号、版本别名、API等级对应关系(全)(一百六十二)
  • Redis的简介,安装(Linux、Windows),配置文件的修改---详细介绍
  • Vscode-工具使用
  • Ceph Reef版本 RBD 性能测试:80万写IOPS(10节点、60个NVMe SSD)
  • 微信小程序调用map数据 并在wxml中对数组进行截取的操作
  • 前端项目打包
  • venv使用教程及pyvenv与python3-venv的区别
  • 协程(一)单机--》并发--》协程
  • P1722 矩阵 II
  • 【数据结构】树和二叉树的概念及结构