当前位置: 首页 > 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();}

相关文章:

设计模式(5)代理模式

一、介绍: 【Subject/抽象角色】定义了RealSubject和Proxy的共用接口,这样就可以在任何使用RealSubject的地方都可以使用Proxy 【RealSubject/真实角色】定义Proxy所代表的真实实体 【Proxy/代理角色】保存一个引用使得代理可以访问实体,并…...

Django配置(部署环境较乱,暂时启用)

django配置 web服务器中部署项目及WSGI简介 web服务器 WSGI 在IIS中部署django项目 安装 wfastcgi :pip install wfastcgi安装IIS: 以上选择项勾选后确定 将CGI文件复制到项目中, 将项目复制到IIS默认目录中 部署IIS 添加变量信息如下…...

【设计模式】桥接模式

桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。 这种模式涉及到一个作为桥接的接口,使得…...

ol问题总结二

一、加载坐标系是4326格式的&#xff0c;使用wfsServer发布的服务&#xff0c;图层加载失败&#xff1b;坐标系是3857格式的。图层加载正常 原因&#xff1a;4326格式的&#xff0c;发布出来的&#xff0c;经纬度是颠倒的 解决方案一&#xff1a;将经纬度进行反转 <templa…...

批量打印-----jsPDF将图片转为pdf,并合并pdf

安装依赖并引入 import jsPDF from jspdf; import { PDFDocument, } from pdf-lib;注意一、 使用jspdf将图片&#xff08;jpg/jpeg/png/bmp&#xff09;转pdf&#xff08;记为pdfA&#xff09;&#xff0c;得到的pdf&#xff08;pdfA&#xff09;和需要合并的pdf(记为pdfB)类…...

【Git】版本控制器详解之git的概念和基本使用

版本控制器git 初始Gitgit的安装git的基本使用初始化本地仓库配置本地仓库三区协作添加---add修改文件--status|diff版本回退--reset撤销修改删除文件 初始Git 为了能够更⽅便我们管理不同版本的⽂件&#xff0c;便有了版本控制器。所谓的版本控制器&#xff0c;就是⼀个可以记…...

C语言 棱形图案

目录 一、问题分析 上部分&#xff1a; 下部分&#xff1a; 二、代码演示 一、问题分析 如上图所示&#xff0c;我们可以将棱形进行拆解&#xff0c;分为上下两个部分。 上部分&#xff1a; 通过观察&#xff0c;我们得到 单边空格数 上半部分总行数 - 行数 - 1 …...

在idea使用GitHub账号、Copilot异常

登录GitHub显示这样的信息&#xff1a; Invalid authentication data.Connection refused: connect Failed to initiate the GitHub login process. Please try again. 修改hosts&#xff08;C:\Windows\System32\drivers\etc\hosts&#xff09;&#xff0c;添加以下参数即可…...

面试热题(反转字符串中的单词)

给你一个字符串 s &#xff0c;请你反转字符串中 单词 的顺序。 单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。 返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。 注意&#xff1a;输入字符串 s中可能会存在前导空格、尾随空格…...

Stable Diffusion WebUI 从零基础到入门

本文主要介绍Stable Diffusion WebUI的实际操作方法&#xff0c;涵盖prompt推导、lora模型、vae模型和controlNet应用等内容&#xff0c;并给出了可操作的文生图、图生图实战示例。适合对Stable Diffusion感兴趣&#xff0c;但又对Stable Diffusion WebUI使用感到困惑的同学&am…...

【uniapp】一文读懂app端安装包升级

一、前言 首先&#xff0c;在app端开发上线的过程中&#xff0c;会面临一个问题&#xff0c;就是关于app端的版本升级的问题。如果不做相关处理来引导用户的话&#xff0c;那么app就会出现版本没有更新出现的各种问题&#xff0c;我们常见的有在线升级和去指定地址下载安装两种…...

【算法题】2518. 好分区的数目

题目&#xff1a; 给你一个正整数数组 nums 和一个整数 k 。 分区 的定义是&#xff1a;将数组划分成两个有序的 组 &#xff0c;并满足每个元素 恰好 存在于 某一个 组中。如果分区中每个组的元素和都大于等于 k &#xff0c;则认为分区是一个好分区。 返回 不同 的好分区的…...

编写守护进程

守护进程是一个后台进程&#xff0c;当操作系统启动时就可以运行的进程&#xff0c;当操作系统结束时结束的进程&#xff0c;与终端无关。 结果 不想要了就杀死...

stable-diffusion-webui启动No Python at ‘C:\xxx\xxx\python.exe‘

打开webui.bat 把 if not defined VENV_DIR (set "VENV_DIR%~dp0%venv") 中的%~dp0venv改成自己python的安装路径就行获取直接set值即可 如 set VENV_DIRD:\Users\xxx\AppData\Local\Programs\Python\Python310 另外就是直接运行webui-user.bat也可以 如果运行…...

面试热题(合并两个有序列表)

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 合并链表这类型题也是比较经典的题了&#xff0c;因为链表是由指针相互指向而确定位置&#xff0c;所以我们只需要改变某些节点的指针便可以做到对链表进行排序 今天这个方法…...

QT生成Word PDF文档

需求&#xff1a;将软件处理的结果保存为一个报告文档&#xff0c;文档中包含表格、图片、文字&#xff0c;格式为word的.doc和.pdf。生成word是为了便于用户编辑。 开发环境&#xff1a;qt4.8.4vs2010 在qt的官网上对于pdf的操作介绍如下&#xff1a;http://qt-project.org/…...

阿里云服务器搭建WordPress建站教程基于Windows系统

本教程是使用阿里云服务器镜像系统选择的是Windows操作系统&#xff0c;手动安装WordPress博客网站全过程。本教程介绍如何在Windows操作系统的ECS实例上搭建WordPress网站。 目录 准备工作 搭建WordPress网站 解析WordPress网站域名 准备工作 创建Windows操作系统的ECS实…...

动态链接(8/11)

静态链接的缺点&#xff1a;生成的可执行文件体积较大&#xff0c;当多个程序引用相同的公共代码时&#xff0c;这些公共代码会多次加载到内存&#xff0c;浪费内存资源。 为了解决这个问题&#xff0c;动态链接对静态链接做了一些优化&#xff1a;对一些公用的代码&#xff0…...

Python 之 Http 获取网页的 html 数据,并去掉 html 格式等相关信息

Python之 Http 获取网页的 html 数据,并去掉 html 格式等相关信息 目录 Python之 Http 获取网页的 html 数据,并去掉 html 格式等相关信息...

干不完根本干不完,我也不想加班,快来围观时间管理大师

时间不够用&#xff0c;怎么办&#xff1f; 成功不靠加班。生产队的驴都不加班&#xff0c;你加什么班&#xff1f;到点就下班&#xff0c;该玩玩&#xff0c;该学习认真学&#xff0c;累了就睡觉。 你可以做任何事&#xff0c;但不必做所有事。 时间管理&#xff0c;不是管…...

别再只用Entity了!Cesium性能优化实战:用Primitive实例化渲染1000个建筑模型

突破Cesium性能瓶颈&#xff1a;用Primitive实例化渲染千级建筑模型的实战指南 当数字孪生城市项目需要展示数千栋建筑时&#xff0c;Entity API的便捷性反而成为性能杀手——帧率骤降、交互卡顿成为常态。这并非Cesium引擎的极限&#xff0c;而是我们尚未掌握其底层渲染能力的…...

STK11.2 实战:从三维空间到二维平面的卫星相对运动可视化分析

1. 为什么需要卫星相对运动可视化分析 在航天任务中&#xff0c;两颗或多颗卫星之间的相对运动关系分析是至关重要的。想象一下&#xff0c;你正在指挥一场太空芭蕾&#xff0c;需要确保每位舞者&#xff08;卫星&#xff09;都能在正确的时间出现在正确的位置&#xff0c;既不…...

西门子S7-200SMART与三菱变频器通讯程序:Modbus RTU协议下的高效控制解决方案

西门子S7-200SMART与三菱变频器通讯程序&#xff0c;实际效果如视频所示&#xff0c;认准店名未来电气&#xff0c;支持。 只是程序&#xff0c;不发快递物流&#xff0c;采用modbus rtu协议。 型号:plc西门子200smart&#xff0c;威纶通MT8071IE&#xff0c;变频器FR-E700(FR-…...

智慧交通货车装载状态满载空载卡车是否载货检测数据集VOC+YOLO格式1053张3类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件)图片数量(jpg文件个数)&#xff1a;1053标注数量(xml文件个数)&#xff1a;1053标注数量(txt文件个数)&#xff1a;1053标注类别…...

无网环境也能玩转DBeaver?手把手教你离线安装与ClickHouse连接(附实测jar包)

无网环境下的DBeaver实战&#xff1a;离线安装与ClickHouse连接全指南 在企业级数据库管理场景中&#xff0c;网络隔离环境并不罕见。许多金融、军工和政府机构的核心生产环境往往采用物理隔离的网络架构&#xff0c;这给开发者和DBA带来了独特的挑战。本文将深入探讨如何在完全…...

Slick轮播进阶玩法:用filter方法实现动态内容筛选(含电商案例)

Slick轮播进阶玩法&#xff1a;用filter方法实现动态内容筛选&#xff08;含电商案例&#xff09; 轮播组件早已不是简单的图片展示工具&#xff0c;而是承载着复杂业务逻辑的交互界面。在电商平台中&#xff0c;用户期望能够像操作商品列表一样与轮播互动——按价格区间筛选、…...

别再只盯着波特率了!手把手教你为你的Arduino/STM32项目选择合适的串口参数(含校验位与传输距离实战)

嵌入式开发实战&#xff1a;如何为Arduino/STM32项目精准配置串口参数 最近在调试一个基于STM32的温室监测系统时&#xff0c;遇到了一个典型问题&#xff1a;传感器数据在3米距离内传输正常&#xff0c;但当我将传感器移到5米外时&#xff0c;数据就开始出现随机错误。这让我意…...

Pixel Aurora Engine实战教程:利用CPU Offload降低显存占用实操指南

Pixel Aurora Engine实战教程&#xff1a;利用CPU Offload降低显存占用实操指南 1. 认识Pixel Aurora Engine Pixel Aurora Engine是一款基于AI扩散模型的像素艺术生成工具&#xff0c;它将现代AI技术与复古游戏美学完美融合。这款工具最吸引人的特点是其独特的8-bit像素风格…...

Sunshine终极指南:打造你的个人游戏串流服务器

Sunshine终极指南&#xff1a;打造你的个人游戏串流服务器 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine Sunshine是一款开源的自托管游戏串流服务器&#xff0c;专为Moonlight客…...

飞书机器人Webhook接入避坑指南:从Python 2.7到3.11的版本适配与APScheduler配置详解

飞书机器人Webhook接入全版本实战手册&#xff1a;从Python 2.7到3.11的深度适配与APScheduler高阶配置 当企业协作工具遇上自动化流程&#xff0c;飞书机器人的Webhook接入成为提升效率的利器。但在实际开发中&#xff0c;从Python 2.7到3.11的版本跨度、不同操作系统的环境差…...