深度学习设计模式之代理模式

文章目录

  • 前言
  • 一、介绍
  • 二、详细分析
    • 1.核心组成
    • 2.实现步骤
    • 3.代码示例
    • 4.优缺点
      • 优点
      • 缺点
    • 5.使用场景
  • 总结


前言

代理模式是结构型设计模式,主要是为其他对象提供一种代理以控制对这个对象的访问。


一、介绍

代理模式(Proxy Pattern)是一种常用的设计模式,属于结构型模式之一。它为另一个对象提供一个代替或占位符对象,以便控制对它的访问。代理模式中客户端不直接调用实际的对象,而是通过调用代理间接性的调用实际的对象。

二、详细分析

1.核心组成

  • Subject(抽象接口):定义了原始对象和代理对象的共同接口。

  • RealSubject(真实对象):被代理的真实对象,实现了抽象接口。

  • Proxy(代理对象):包含对真实对象的引用,并实现了与真实对象相同的接口,以便可以在任何时刻代替真实对象。

在这里插入图片描述

2.实现步骤

  1. 创建抽象接口;
  2. 创建真实对象并实现抽象接口;
  3. 创建代理对象并实现抽象接口,代理对象中引入真实对象;
  4. 创建测试类,调用代理对象方法以实现增强的目的。

3.代码示例

抽象接口

/**
 * Subject 抽象接口
 */
public interface RentingHouse {

    /**
     * 租房
     */
    void rentingHouse();

}

真实对象

/**
 * 房东
 * RealProject:真实的对象
 */
public class LandlordOrLandlady implements RentingHouse{
    @Override
    public void rentingHouse() {
        System.out.println("房东:我有一套在市中心120平米精装修二室一厅");
    }
}

代理对象

/**
 * 中介
 * Proxy:代理对象
 */
public class Intermediary implements RentingHouse{

    /**
     * 真实对象
     */
    private RentingHouse real = new LandlordOrLandlady();

    @Override
    public void rentingHouse() {
        real.rentingHouse();
        System.out.println("中介:线上租赁渠道");
        System.out.println("中介:线下门店开放");
        System.out.println("中介:全年无休,只为带你看房");
    }

}

测试类

    public static void main(String[] args) {
        RentingHouse intermediary = new Intermediary();
        intermediary.rentingHouse();
    }

结果
在这里插入图片描述

4.优缺点

优点

  • 可以在访问一个类时做一些控制,或增强一些功能;

  • 符合开闭原则,具有较好的灵活性和可扩展性。

缺点

  • 增加系统的复杂度和调用链路。

5.使用场景

  • 客户端不想直接访问实际的对象,或者访问实际的对象存在困难,通过一个代理对象来完成间接的访问;
  • 想在访问一个类时做一些控制,或者增强功能。

总结

本篇文章简单介绍了,代理模式的原理、优缺点和使用场景,并提供案例代码。正常代理模式又分为动态代理和静态代理,熟悉spring的同学应该知道,spring中使用了大量的动态代理,对此打算深入研究的同学可以去查阅动态代理和静态代理相关资料。

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

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

相关文章

快速在springboot项目中应用EasyExcel

一、介绍 EasyExcel 是阿里巴巴开源的简化Excel文件读取和写入的开源库。主要的特点如下: 简单易用的API:EasyExcel提供简单API,隐藏处理Excel文件的底层细节。注解支持:支持使用注解将Java对象映射到Excel列,便于Ja…

《梦醒蝶飞:释放Excel函数与公式的力量》11.3 ISTEXT函数

第11章:信息函数 第三节 11.3 ISTEXT函数 11.3.1 简介 ISTEXT函数是Excel中的一个信息函数,用于检查指定单元格中的内容是否为文本。如果单元格内容是文本,则返回TRUE;否则返回FALSE。ISTEXT函数在数据验证、条件格式化和逻辑判…

【UE5.1】Chaos物理系统基础——06 子弹破坏石块

前言 在前面我们已经完成了场系统的制作(【UE5.1】Chaos物理系统基础——02 场系统的应用_ue5)以及子弹的制作(【UE5.1 角色练习】16-枪械射击——瞄准),现在我们准备实现的效果是,角色发射子弹来破坏石柱。…

如何利用扩散实现结构功能动态调控?

如何利用扩散实现结构功能动态调控? 利用扩散机制在生物打印结构内部创建特定空间梯度的方法,主要分为两个方面: 1. 形成形态发生素梯度 形态发生素的作用:形态发生素是能够诱导细胞响应的信号分子,常用于生物打印结…

探索GitHub上的两个革命性开源项目

在数字世界中,总有一些项目能够以其创新性和实用性脱颖而出,吸引全球开发者的目光。今天,我们将深入探索GitHub上的两个令人惊叹的开源项目:Comic Translate和GPTPDF,它们不仅改变了我们处理信息的方式,还极…

Debezium日常分享系列之:Debezium 3.0.0.Alpha1 Released

Debezium日常分享系列之:Debezium 3.0.0.Alpha1 Released 一、重大改变Java 和 Maven 要求已更改 二、新的特征和提高MongoDB 三、更多内容 Debezium 3 的第一个预发布版本 3.0.0.Alpha1。这个版本虽然比正常的预版本要小,但高度关注几个关键点&#xff…

docker中mysql设置lower_case_table_names配置的坑

前沿 今天在使用flowable流程框架的时候,遇到一个问题。需要配置MySQL数据库以实现表名大小写不敏感。本以为这是一个简单的任务,却耗费了我两个多小时的时间。 docker容器中修改配置,重启不成功 我们前提是容器中的mysql中已经有很多数据…

Web安全:SQL注入

一、SQL注入三要素 1、用户可以对输入的参数值进行修改。 2、后端不对用户输入的参数值进行严格过滤。 3、用户修改后的参数值可以被带入后端中成功执行,并返回一定结果。 二、SQL注入原理 简单来说,用户输入的值会被插入到SQL语句中,然后…

Milvus 核心设计(1) ---- 数据一致性的等级及使用场景

目录 背景 Milvus的数据一致性 设置数据一致性等级 等级类型 PACELC定理 level 详细解释 Strong Bounded staleness Session Eventually 总结 背景 分布式上的可扩展性是个比较重要的concept。Chroma 核心之前写过了,他的最大优势在于轻量级且好用。Milvus相对Ch…

tkinter-TinUI-xml实战(11)多功能TinUIxml编辑器

引言 在TinUIXml简易编辑器中,我们通过TinUI搭建了一个简易的针对TinUIXml布局的编辑器,基本掌握了TinUIXml布局和TinUIXml的导入与导出。现在,就在此基础上,对编辑器进行升级。 本次升级的功能: 更合理的xml编辑与…

大众汽车入职SHL在线测评、英语口语、招聘笔试如何通过、考点分析|备考建议

大众汽车入职在线测验真题考点分析,通过技巧? 大众汽车集团(中国)在招聘过程中,认知能力测试是评估候选人是否适合某个职位的重要环节。候选人会收到带有线上测评链接的邮件,测评包括胜任力潜力测试(Compe…

多输入多输出 | Matlab实现Transformer多输入多输出预测

多输入多输出 | Matlab实现Transformer多输入多输出预测 目录 多输入多输出 | Matlab实现Transformer多输入多输出预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 多输入多输出 | Matlab实现Transformer多输入多输出预测(完整源码和数据) 1.da…

CSS选择器:基本选择器、复合选择器、伪类选择器、伪元素选择器

CSS选择器包含:基本选择器、复合选择器、伪类选择器、伪元素选择器。 选择器是选择标签的一种方式,例如 ID 选择器就是通过 ID 选择标签的,类选择器就是通过类名选择标签的。 在 CSS3 中有很多类型的选择器,如下是《W3school》提…

Android 使用 Debug.startMethodTracing 分析方法耗时

参考 Generate Trace Logs by Instrumenting Your App 官网提供了 trace 工具来分析方法耗时。 生成 trace 文件 package com.test.luodemo.trace;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle; import android.os.Debug; import android.uti…

昇思25天学习打卡营第13天|基于MindNLP+MusicGen生成自己的个性化音乐

关于MindNLP MindNLP是一个依赖昇思MindSpore向上生长的NLP(自然语言处理)框架,旨在利用MindSpore的优势特性,如函数式融合编程、动态图功能、数据处理引擎等,致力于提供高效、易用的NLP解决方案。通过全面拥抱Huggin…

[C++]——同步异步日志系统(4)

同步异步日志系统 一、日志等级模块设计二、日志消息类设计 一、日志等级模块设计 定义出日志系统所包含的所有日志等级分别为:(7个等级) UNKNOW0,未知等级的日志DRBUG ,调试等级的日志INFO ,提示等级的日…

企业人事管理系统

1.课设要求描述 【系统描述】软件从登录界面开始,验证用户名与密码后,根据登录用户名权限的不同,打开软件后展示不同的功能模块。软件主要功能模块是人事管理、部门管理、备忘录、员工生日提醒、数据库的维护等。 通过简单分析后&#xf…

STM32串口工作原理

STM32的串口是相当丰富的,功能也很强劲。最多可提供5 路串口,有分数波特率发生器、支持单线光通信和半双工单线通讯、支持LIN、智能卡协议和IrDA SIRENDEC 规范(仅串口3支持)、具有DMA等。 串口最基本的设置,就是波特率的设置。STM32的串口使…

Nature Communications|柔性高密度、高灵敏应变传感器阵列(柔性应变传感/界面调控/电子皮肤/柔性电子)

复旦大学武利民( Limin Wu)和李卓( Zhuo Li)团队,在《Nature Communications》上发布了一篇题为“High-density, highly sensitive sensor array of spiky carbon nanospheres for strain field mapping”的论文。论文内容如下: 一、 摘要 在工程应用中,准确地映射应变…

暑假实践web前后端开发-笔记

(主要是前端开发,不做后端,前面先介绍一个实现了前后端的项目) 一. 安装和运行项目MoreMall 1.介绍项目MoreMall 已经实现前后端可以前后端交互,前端:client,后端:server&#xff…