设计模式之代理模式精讲

代理模式(Proxy Pattern)也叫委托模式,是一个使用率非常高的模式,比如我们在Spring中经常使用的AOP(面向切面编程)。

概念:为其他对象提供一种代理以控制对这个对象的访问。

代理类和实际的主题类都实现同一个接口,由代理类代替主题类去做一些操作,并且在操作的基础上,增加一些额外的操作。

下面我们以代理买房的例子,来帮助大家理解代理模式的使用。

public interface BuyHouse {
    void buy();
}

public class RealBuyer implements BuyHouse {
    @Override
    public void buy() {
        System.out.println("真正的买家,付钱买房。");
    }
}

public class EstateAgent implements BuyHouse {
    private RealBuyer realBuyer;
    public EstateAgent(RealBuyer realBuyer) {
        this.realBuyer = realBuyer;
    }
    @Override
    public void buy() {
        beforeBuy();
        realBuyer.buy();
        afterBuy();
    }
    private void beforeBuy() {
        System.out.println("挑选房子、谈价格等");
    }
    private void afterBuy() {
        System.out.println("交房、售后服务等");
    }
}

public class Demo {
    public static void main(String[] args) {
        EstateAgent estateAgent = new EstateAgent(new RealBuyer());
        estateAgent.buy();
    }
}

大家如果用过AOP,应该对这个实现非常眼熟。实际开发中,实现类如果是一个API,我们可以在代理类中进行很多操作。比如,增加权限校验,增加日志记录等。好处是非常明显的,整个过程我们没有改动已有的API,只是在代理类中对已有操作进行重新组合。AOP面向切面编程,也是非常形象的表达。

如果大家需要视频版本的讲解,大家可以关注我的B站:

七、设计模式之代理模式精讲

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

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

相关文章

二、Java语法基础

1、Java语言的关键字、标识符及命名规范 1)java关键字 2)标识符 3)JAVA中的命名规范 包名的命名规范:域名.公司名称.项目名称.模块名称 类的命名规范:首字母大写,第二个单词的首字母大写,以此类推。 2、进制间的转换(二进制、十进制) 1)十进制->二进制 采用…

PHP 跳转搜索(Jump Search)

与二分搜索一样,跳转搜索是一种针对排序数组的搜索算法。基本思想是通过按固定步骤向前跳跃或跳过某些元素来代替搜索所有元素来检查更少的元素(比线性搜索)。例如,假设我们有一个大小为 n 的数组 arr[] 和一个大小为 m 的块&…

基于Hive大数据分析springboot为后端以及vue为前端的的民宿系

标题基于Hive大数据分析springboot为后端以及vue为前端的的民宿系 本文介绍了如何利用Hive进行大数据分析,并结合Spring Boot和Vue构建了一个民宿管理系统。该民民宿管理系统包含用户和管理员登陆注册的功能,发布下架酒店信息,模糊搜索,酒店详情信息展示,收藏以及对收藏的…

宝塔面板与1Panel的详细对比分析

在当今的服务器管理领域,宝塔面板和1Panel都是备受欢迎的管理工具。它们各自具有独特的特点和优势,同时也存在一些局限性。本文将从多个维度对比这两款产品,帮助用户根据自身需求做出更合适的选择。 宝塔面板 优点 易用性:宝塔…

vue的创建、启动以及目录结构详解

vue的创建、启动以及目录结构详解目录 一. vue项目的创建 二. vue的目录结构 三. src的目录结构 四. vue项目的启动 4.1 方法1 4.2 方法2 一. vue项目的创建 创建一个工程化的Vue项目,执行命令:npm init vuelatest 注意:如果你在这个目…

国内如何购买midjourney?midjourney购买教程?midjourney注册方式?

1. Midjourney介绍 Midjourney 是一款备受欢迎的人工智能生成图像工具,它可以通过输入文字描述,自动生成精美的图像。与许多其他图像生成工具不同,Midjourney 不需要安装任何软件,也不受个人电脑性能的限制,因为它运行…

FANUC机器人故障诊断—报警代码(一)

一、SRVO-050碰撞检测报警 [原因]检测出碰撞 [对策] 1.确认机器人是否碰撞。 2.确认是否正确进行了负载设定。 3.确认是否有过载、过度的加速度附加指令。 4.在长期停用后启动,或者外部气温较低时发生该报警。启动后,先短时间内低速运转设备&#…

wordpress插件,免费的wordpress插件

WordPress作为世界上最受欢迎的内容管理系统之一,拥有庞大的插件生态系统,为用户提供了丰富的功能扩展。在内容创作和SEO优化方面,有一类特殊的插件是自动生成原创文章并自动发布到WordPress站点的工具。这些插件能够帮助用户节省时间和精力&…

图片怎么调整尺寸?图片宽度和高度怎么设置

平时在使用图片的时候,最常处理的就是图片尺寸问题,为了能让图片适用于更多的场景,那么怎么修改图片尺寸呢?试试本文介绍的几个关于图片改大小的方法吧,有需要图片大小转换的继续往下看。 压缩图网站,点击“…

【数据结构与算法】递归和逆置

线性数据结构的遍历 let arr [1,2,3,4]// 数组的基本遍历 function traverse(arr) {if (arr null) returnfor (let i 0; i < arr.length; i) {console.log(arr[i])} } traverse(arr)function Node(value) {this.value valuethis.null null }let node1 new Node(1) le…

虚拟机 centos 下载node 并设置 淘宝镜像

直接安装报错。 获取想要版本的资源 必须要先选择版本&#xff0c;否则有可能&#xff0c;会找不到包&#xff0c;提示没有可用软件包 nodejs # 16.x curl --silent --location https://rpm.nodesource.com/setup_16.x | bash -# 14.x curl --silent --location https://rpm.…

密码学基础-对称密码/公钥密码/混合密码系统 详解

密码学基础-对称密码/公钥密码 加解密说明1.加密解密必要因素加密安全性说明 什么是对称密码图示说明对称密码详解什么是DES?举例说明 什么是3DES什么是AES? 公钥密码什么是RSA? 对称密钥和公钥密码优缺点对比对称密码对称密码算法总结对称密码存在的问题? 公钥密码公钥密码…

30.Python从入门到精通—Python3 命名空间和作用域 命名空间 作用域

30.从入门到精通&#xff1a;Python3 命名空间和作用域 命名空间 作用域 Python3 标准库概览 操作系统接口 文件通配符 命令行参数 错误输出重定向和程序终止 字符串正则匹配 访问 互联网 日期和 个人简介Python3 命名空间和作用域命名空间作用域 Python3 标准库概览操作系统接…

【OpenGL】使用 python + Qt + OpenGL 的现代渲染

伴随资源 目录 一、说明二、 关于PyQt6.x2.1 QOpenGLWidget详细说明2.2 绘画技巧 三、PyOpenGL四、OpenGL 管线五、Python集成开发环境5.1 Emacs配置5.2 pycharm环境 六、你好&#xff0c;OpenGL&#xff01;七、QGL控件八、平截头体.svg九、定义几何9.1 立即模式与保留模式9…

消息队列的七种经典应用场景

在笔者心中&#xff0c;消息队列&#xff0c;缓存&#xff0c;分库分表是高并发解决方案三剑客。 在职业生涯中&#xff0c;笔者曾经使用过 ActiveMQ 、RabbitMQ 、Kafka 、RocketMQ 这些知名的消息队列 。 这篇文章&#xff0c;笔者结合自己的真实经历&#xff0c;和大家分享…

SEH异常之编译器原理探究(1)

_try_except原理 调用_except_handle3这个异常处理函数&#xff0c;这里并不是每个编译器的异常处理函数都是相同的&#xff0c;然后存入结构体&#xff0c;将esp的值赋给fs:[0]&#xff0c;再就是提升堆栈的操作 每个使用 _try _except的函数&#xff0c;不管其内部嵌套或反复…

大模型预测,下一个token何必是文字?

太快了太快了… 大模型的生成技能&#xff0c;已经到了普通人看不懂的境界&#xff01; 它可以根据用户过去5年的体检报告&#xff0c;生成未来第1年、第2年、第3年的体检报告。 你看&#xff0c;这个生成的过程&#xff0c;是不是像极了ChatGPT&#xff0c;根据历史单词预测…

vue-v-for遍历index与id

一.遍历列表key的作用&#xff08;index作为key&#xff09; 虚拟DOM上有key,是虚拟的&#xff0c;但是真实DOM上没有&#xff0c;key是Vue内部的 当使用index作为key的时候&#xff0c;Vue会根据初识数据生成一个初始的虚DOM&#xff0c; 然后在页面上映射出真实DOM 如果向数据…

Webpack生成企业站静态页面 - 项目搭建

现在Web前端流行的三大框架有Angular、React、Vue&#xff0c;很多项目经过这几年的洗礼&#xff0c;已经都 转型使用这三大框架进行开发&#xff0c;那为什么还要写纯静态页面呢&#xff1f;比如Vue中除了SPA单页面开发&#xff0c;也可以使用nuxt.js实现SSR服务端渲染&#x…

CrossOver2024最新免费版虚拟机软件 Mac和Linux系统上运行Windows 应用/游戏 CrossOver是什么软件

CrossOver是一款由CodeWeavers公司开发的&#xff0c;运行在Mac和Linux操作系统下&#xff0c;能够模拟Windows系统应用运行环境的软件。它不需要用户单独安装Windows操作系统&#xff0c;就能让Windows平台上的应用程序在Mac和Linux上顺畅运行。CrossOver在技术上使用了Wine&a…