设计模式11——代理模式

写文章的初心主要是用来帮助自己快速的回忆这个模式该怎么用,主要是下面的UML图可以起到大作用,在你学习过一遍以后可能会遗忘,忘记了不要紧,只要看一眼UML图就能想起来了。同时也请大家多多指教。

代理模式(Proxy)

是一种行为型模式。

目录

一、概述

1.1、主要的角色:

1.2、直观的理解上这些角色之间的关系如下:

1.3、通过技术实现的角度看,对象之间关系的UML图如下:

二、使用步骤

三、简单举例

3.1、对象之间的关系用UML图表示如下:

3.2、Java实现代码如下:


一、概述

1、为其他对象提供一种代理 以控制对这个对象的访问;
2、远程代理,也就是为一个对象在不同地址空间提供局部代表,这样就可以隐藏一个对象存在于不同地址空间的事实;
3、虚拟代理,是根据需要创建开销很大的对象。通过代理来存放实例化需要很长时间的真实对象;
4、安全代理,用来控制对真实对象的访问权限;
5、智能指引,是指当调用真实的对象时,让代理处理另外的一些事情。

 分类:

  • 静态代理:被代理类不变
  • 动态代理:通过一些技术或设计手段,让被代理类可以根据需要动态改变,如Java种使用反射等

1.1、主要的角色:

主要的角色分两种,但从代码(或技术)实现的角度看(为了充分使用面向对象语言的3大特性封装、继承、多态,还另外需要抽象类或接口)可能有3个:

  1. 被代理类:被代理类的抽象类或接口 + 被代理类的实现类和子类
  2. 代理类:代理类

1.2、直观的理解上这些角色之间的关系如下:

代理模式和适配器模式看起来比较像,但需要注意的是:

  • 目标不同:一个主要目标是做代理,不允许客户直接访问被代理对象;一个主要目标是做适配,没有强要求说不能访问被适配对象。也就是说,代理可能要实现所有请求,而适配只要实现需要适配地那部分的请求即可。
  • 代码不同:代理模式下请求方只能调用代理类对象;适配器模式下请求方可以根据需要调用任何一个。

1.3、通过技术实现的角度看,对象之间关系的UML图如下:

二、使用步骤

  • 确定要代理哪些类和对象;
  • 确定我们要代理的原因,如:控制对象的访问、远程代理、虚拟代理、安全代理、智能指引;
  • 最后再创建代理类实现目标。

三、简单举例

现在有个请求处理对象需要被代理才能使用。

3.1、对象之间的关系用UML图表示如下:

3.2、Java实现代码如下:

(建议你在本地试一下,加深印象)

被代理类接口:

public interface ISubject {
    void request();
}

被代理类:

public class RealSubject implements ISubject{
    @Override
    public void request() {
        System.out.println("具体的操作...");
    }
}

代理类:

public class Proxy implements ISubject {
    private ISubject realSubject;

    public Proxy() {
        this.realSubject = new RealSubject();
    }

    @Override
    public void request() {
        this.realSubject.request();
    }

}

主程序(发起请求的类):

public class Main {
    public static void main(String[] args) {
        Proxy proxy = new Proxy();
        proxy.request();
    }
}

这里就不再举例了,可以把上面的Java例子复制到你本地,运行main函数试一下加深理解。这些代码都是我自己学习的时候根据一些教材手敲的,不存在bug可以直接运行。

如果觉得本文还不错,就请点个赞给作者一点鼓励吧!如果有建议,也请评论指教和讨论!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/635685.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ATA-7020高压放大器原理介绍

高压放大器是一种电子设备,用于增加输入信号的幅度,使其输出具有更大的电压。它在各种领域中发挥着关键作用,尤其是在需要高电压信号的应用中,如声学、医学成像、科学研究等领域。 高压放大器工作原理介绍: 信号输入&a…

图像上下文学习|多模态基础模型中的多镜头情境学习

【原文】众所周知,大型语言模型在小样本上下文学习(ICL)方面非常有效。多模态基础模型的最新进展实现了前所未有的长上下文窗口,为探索其执行 ICL 的能力提供了机会,并提供了更多演示示例。在这项工作中,我…

go mod模式下,import gitlab中的项目

背景 为了go项目能够尽可能复用代码,把一些公用的工具类,公用的方法等放到共用包里统一管理。把共用包放到gitlab的私有仓库中。 遇到的问题 通过https方式,执行go get报了错误。 通过ssh方式,执行go get报了错误。 修改配置&am…

Android:使用Kotlin搭建MVC架构模式

一、简介Android MVC架构模式 M 层 model ,负责处理数据,例如网络请求、数据变化 V 层 对应的是布局 C 层 Controller, 对应的是Activity,处理业务逻辑,包含V层的事情,还会做其他的事情,导致 ac…

WebRTC-SFU服务器-Janus部署【保姆级部署教程】

一、SFU WebRTC SFU(Selective Forwarding Unit)构架是一种通过服务器来路由和转发WebRTC客户端音视频数据流的方法。这种构架的核心特点是将服务器模拟成一个WebRTC的Peer客户端,从而实现了音视频流的直接转发。 在SFU构架中,服务器作为中心节点,但并不负责音视频流的混…

TG5032CGN TCXO 超高稳定10pin端子型适用于汽车动力转向控制器

TG5032CGN TCXO / VC-TCXO是一款应用广泛的晶振,具有超高稳定性,CMOS输出和使用晶体基振的削波正弦波输出形式。且有低相位噪声优势,是温补晶体振荡器(TCXO)和压控晶体振荡器(VCXO)结合的产物,具有TCXO和VCXO的共同优点&#xff0…

海山数据库(He3DB)代理ProxySQL使用详解:(一)架构说明与安装

一、ProxySQL介绍 1.1 简介 业界比较知名的MySQL代理,由ProxySQL LLC公司开发并提供专业的服务支持,基于GPLv3开源协议进行发布,大部分配置项可动态变更。后端的MySQL实例可根据用途配置到不同的hostgroup中,由ProxySQL基于7层网络协议,将来…

Python 实现Word (DOC或DOCX)与TXT文本格式互转

目录 引言 安装Python库 使用Python将Word转换为TXT文本格式 使用Python将TXT文本格式转换为Word 引言 Word文档和TXT文本文件是日常工作和生活中两种常见的文件格式,各有其特点和优势。Word文档能够保留丰富的格式设置,如字体、段落、表格、图片等…

格雷母线与卸料小车的非接触式定位技术

在现代化的工业生产中,自动化与智能化已成为提高生产效率、降低成本的关键手段。特别是在钢铁、矿山等重工业领域,卸料小车作为物料搬运的重要设备,其定位精度和工作效率直接影响了整个生产线的运行状况。格雷母线高精度位移测量系统的引入&a…

worklist配置调试日志记录

工作记录用,不拘小节! 设备请求日志 2024-05-23 09:03:14,503 [WorkListServer: 10.87.232.253 [18]] INFO - LISTMWL Request from [gehc]: (0008,0005) CS [ISO_IR 100] # 10 Specific Character Set 1-N (0008,0020) DA [] …

C++ | Leetcode C++题解之第108题将有序数组转换为二叉搜索树

题目&#xff1a; 题解&#xff1a; class Solution { public:TreeNode* sortedArrayToBST(vector<int>& nums) {return helper(nums, 0, nums.size() - 1);}TreeNode* helper(vector<int>& nums, int left, int right) {if (left > right) {return nu…

12V-24V转8.4V5A同步降压恒压WT6020

12V-24V转8.4V5A同步降压恒压WT6020 WT6020是一款高效率的DC/DC转换器&#xff0c;采用抖动频率和平均电流模式架构&#xff0c;是单片同步降压设计。具有优秀的线路和负载调节能力&#xff0c;最大输出电流可达10A。 工作电压范围为7V至30V&#xff0c;可调输出电压为1V至20…

php之web开发

目标 实现一款具有常用大部分功能的WEB应用&#xff0c;并初步了解WEB漏洞原理 登录功能&#xff1a; 1、基于前端的登录功能 <!DOCTYPE html> <html> <head> <title>简单登录功能</title> </head> <meta charset"UTF-8"…

拓展类型——枚举

枚举的作用 枚举通常用来约定某个变量的取值范围 使用字面量和联合类型也可以达到约束变量的作用&#xff0c;但是会有不方便的情况 使用字面量和联合类型约束变量的问题 逻辑含义和真实的值会产生混淆&#xff0c;如果修改了真实值&#xff0c;会造成大量代码需要修改 例&…

YOLOv8改进 | 图像去噪篇 | 单阶段盲真实图像去噪网络RIDNet辅助YOLOv8图像去噪(全网独家首发)

一、本文介绍 本文给大家带来的改进机制是单阶段盲真实图像去噪网络RIDNet,RIDNet(Real Image Denoising with Feature Attention)是一个用于真实图像去噪的卷积神经网络(CNN),旨在解决现有去噪方法在处理真实噪声图像时性能受限的问题。通过单阶段结构和特征注意机制,…

ESP32基础应用之使用手机浏览器作为客户端与ESP32作为服务器进行通信

文章目录 1 准备2 移植2.1 softAP工程移植到simple工程中2.2 移植注意事项 3 验证 1 准备 参考工程 Espressif\frameworks\esp-idf-v5.2.1\examples\wifi\getting_started\softAP softAP工程演示将ESP32作为AP&#xff0c;即热点&#xff0c;使手机等终端可以连接参考工程 Esp…

1941springboot VUE 服务机构评估管理系统开发mysql数据库web结构java编程计算机网页源码maven项目

一、源码特点 springboot VUE服务机构评估管理系统是一套完善的完整信息管理类型系统&#xff0c;结合springboot框架和VUE完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用springboot框架&#xff08;MVC模式开发&#xff09;&#xff0c;系统具有完整的源代…

夏天晚上热,早上凉怎么办?

温差太大容易引起感冒 1.定个大概3点的闹钟&#xff0c;起来盖被子。有些土豪可以开空调&#xff0c;我这个咸鱼没有空调。 2.空调调到合适的温度&#xff0c;比如20几度。

使用 Sonatype Nexus Repository Manager 如何安装npm.md

1. 安装与启动 Nexus2. 登录 Nexus Web UI3. 创建 npm 仓库4. &#xff08;可选&#xff09;配置 npm 代理仓库5. 创建 npm 仓库组6. 配置 npm 客户端7. 测试和使用 Sonatype Nexus Repository Manager (通常简称 Nexus) 是一个强大的二进制管理系统&#xff0c;用于存储和管理…

二分查找法

二分查找法 一、标准二分查找法二、改动版二分查找法三、平衡版二分查找法四、二分查找法查找最左元素五、二分查找法查找最右元素六、二分查找法之返会插入位置 一、标准二分查找法 /*** 标准二分查找*/public static int binarySearch(int[] arr, int target) {int i 0, j …