设计模式之代理模式精讲

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

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

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

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

public interface BuyHouse {void buy();
}public class RealBuyer implements BuyHouse {@Overridepublic void buy() {System.out.println("真正的买家,付钱买房。");}
}public class EstateAgent implements BuyHouse {private RealBuyer realBuyer;public EstateAgent(RealBuyer realBuyer) {this.realBuyer = realBuyer;}@Overridepublic 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.hqwc.cn/news/578301.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

人工智能|推荐系统——搜索引擎广告

原文题目 Dark sides of artificial intelligence: The dangers of automated decision-making in search engine advertising(JASIST,2023) 人工智能的阴暗面:搜索引擎广告自动决策的危险 摘要 随着人工智能应用的日益广泛,搜索引擎供应商越来越多地要求广告商使用基于机…

【御控物联】 IOT异构数据JSON转化(场景案例一)

文章目录 前言技术资料 前言 随着物联网、大数据、智能制造技术的不断发展,越来越多的企业正在进行工厂的智能化转型升级。转型升级第一步往往是设备的智能化改造,助力设备数据快速上云,实现设备数据共享和场景互联。然而,在生产…

安全SCDN的威胁情报库对DDOS防护有什么好处

目前网络攻击事件频频发生,DDoS(分布式拒绝服务)攻击已成为各种企业(小到区域性小公司大到各种跨国公司)的主要威胁,DDoS 攻击可能会对企业造成重大损害和破坏,比如对目标公司的业务造成产生不利…

【STM32嵌入式系统设计与开发】——13WWDG(窗口看门狗应用)

这里写目录标题 一、任务描述二、任务实施1、WWDG工程文件夹创建2、函数编辑(1)主函数编辑(2)USART1初始化函数(usart1_init())(3)USART数据发送函数( USART1_Send_Data(&#xff09…

virtualbox 日常运维

前言 虽然平常以macOS和Linux作为主打工作环境,但还是有很多需要用到windows的时候,如camtasia和券商QMT软件。 在二手ThinkPad P53上安装了几个windows虚机,作为测试环境。Mac笔记本远程桌面连接嫌麻烦,还是命令行舒服。MacOS自…

缓冲区溢出漏洞学习总结(漏洞原理及其利用方法)

文章目录 前言1、缓冲区溢出漏洞概述1.1、漏洞概述1.2、缓冲区溢出漏洞概述1.3、缓冲区溢出攻击概述1.4、引发缓冲区溢出的原因 2、栈溢出漏洞2.1、栈溢出漏洞概述2.2、栈溢出漏洞利用2.2.1、利用方法一:修改返回地址2.2.2、利用方法二:覆盖临接变量 3、…

notepad++里安装32位和64位的16进制编辑器Hex-Editor

这个16进制编辑器确实是个好东西,平时工作种会经常用到, 这是hex-editor的官网。这个里边只能下载32位的(64位的看最下边),选一个合适的版本,我当时选的是最新的版本 https://sourceforge.net/projects/npp-plugins/files/Hex%20E…

uniapp开发App——登陆流程 判断是否登陆,是,进入首页,否,跳转到登录页

一、登陆流程 文字描述:用户进入App,之后就是判断该App是否有用户登陆过,如果有,直接进入首页,否则跳转到登陆页,登陆成功后,进入首页。 流程图如下: 二、在uniapp项目中代码实现 实…

接口自动化框架搭建(四):pytest的使用

1,使用说明 网上资料比较多,我这边就简单写下 1,目录结构 2,test_1.py创建两条测试用例 def test_1():print(test1)def test_2():print(test2)3,在pycharm中执行 4,执行结果: 2&#xff0…

DARTS-PT: RETHINKING ARCHITECTURE SELECTION IN DIFFERENTIABLE NAS

Rethinking Architecture Selection in Differentiable NAS 论文链接:https://arxiv.org/abs/2108.04392v1 项目链接:https://github.com/ruocwang/darts-pt ABSTRACT 可微架构搜索(Differentiable Neural Architecture Search, NAS)是目前最流行的网…

软件工程学习笔记14——案例解析篇

一、大型开源项目对软件工程的应用 以VS Code为例,看大型开源项目是如何应用软件工程的。 软件工程的核心,就是围绕软件项目开发,对开发过程的组织,对方法的运用,对工具的使用。 所以当我们去观察一个软件项目&#…

接口自动化框架搭建(八):pytest+allure+jenkins接入

1,安装allure插件 2,创建jenkins项目 怎么确定路径,可以查看工作空间,jenkins默认根目录就是工作空间 配置执行用例的命令,可以现在pycharm上试一下,然后在jenkins中配置: 把启动java服务的代…