设计模式——–代理模式

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

最简单的代理模式,分为三种角色:

抽象主题角色:代理类与被代理共同实现的接口,内部定义了最普通的业务类型。

具体主题角色:被代理类,具体实现接口的方法。

代理主题角色:代理类,继承主题接口,并生成与被代理类方法名一致的方法,并且调用被代理类的方法。

代理模式的扩展

1、普通代理

调用者只能调用代理对象,并且只知道代理对象类型,不知被代理对象类型。

2、强制代理

必须通过实例化被代理对象,然后通过被代理对象的指定的代理对象进行方法调用。

代理类不仅仅可以实现主题接口,也可以实现其他接口完成不同的任务,而且代理的目的是在目标对象方法的基础上作增强,这种增强的本质通常就是对目标对象的方法进行拦截和过滤。

动态代理

动态代理是在实现阶段不用关心代理谁,而在运行阶段才指定代理哪一个对象。使用JDK提供的动态代理接口InvocationHandler对被代理类的方法进行代理。

真实主题实现主题类接口

所有的动态代理实现方法都通过invoke的方法调用。

调用 newProxyInstance(c.getClassLoader(),c.getInterfaces,InvocationHandler h)方法, 重新生成了一个对象,c.getInterfaces找到了类的所有接口,然后实现了接口的所有方法,但是方法都是空的,这些方法都由InvocationHandle方法来接管。

Original: https://www.cnblogs.com/maple92/p/6675911.html
Author: Topze
Title: 设计模式——–代理模式

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/582958/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 内存管理-物理内存虚拟内存布局

    ARM-linux环境,物理内存和虚拟内存之间的映射关系: Original: https://www.cnblogs.com/fanguang/p/11930358.htmlAu…

    Linux 2023年6月6日
    092
  • prometheus监控redis集群

    【1】利用 redis_exporter 监控 redis 集群 (1.0)redis_exporter 以前都是用傻办法,一个实例一个采集器; redis_exporter 支持…

    Linux 2023年5月28日
    0108
  • AIX系统NTP同步配置

    前言 当AIX系统的本地时间与时间服务器授出的标准时间误差大于±1000秒时。xntpd服务将无法同步时间并变得无法正常工作,请进行ntp配置前,先修改AIX系统的本地时间,尽量和…

    Linux 2023年6月6日
    0119
  • [ VM ] 启用 WSL2 后,与 VirtualBox 冲突的解决方法

    https://www.cnblogs.com/yeungchie/ 1. Error 报错 ERROR:current execution environment is VCO=…

    Linux 2023年6月7日
    0164
  • 软件工程 结构化设计方法 第3篇随笔

    * 调用:模块间的一种关系,模块A为了完成其任务必须依赖其他模块 ​ ——————> Original: https://www.cnblogs.com/shuisanya/…

    Linux 2023年6月7日
    0142
  • 2012年脱离程序员队伍,时隔9年,居然一次性把“冒泡排序”算法写对了

    2012年脱离程序员队伍,时隔9年,居然一次性把”冒泡排序”算法写对了 2021年2月7日 立贴纪念 #include int bubble_sort(in…

    Linux 2023年6月13日
    074
  • 面试题目汇总

    目录: 1、数字数组数字数组2、字符串字符串3、链表 链表4、二叉树二叉树 5、堆栈 堆栈 posted @2019-12-11 20:35 风御之举 阅读(63 ) 评论() 编…

    Linux 2023年6月13日
    090
  • MySQL注入点与SQL语句的关系

    注入位置分类 这个分类方式是我自己想的,可能会有一些不准确。如图所示注入方式有3种,内联、终止、堆叠。每种注入方式又根据服务器的响应分为4类,时间延迟、报错、布尔、将执行结果直接输…

    Linux 2023年6月6日
    0136
  • ICMP 协议仿真及ping命令用途

    1、实验目的 加深对 IPv4 协议首部各定义域的理解,掌握路由表的结构和基本配置命令,熟悉 ICMP 的调试操作。 2、实验原理 IPv4 协议定义,网络层协议的相关 RFC 定…

    Linux 2023年6月8日
    0122
  • 手把手教你搭建一个SpringBoot工程

    手把手教你搭建一个SpringBoot工程 首先进入Spring官网,下载Demo工程 像这样设置好 点击下载 将工程导入Idea并打开 在 application.propert…

    Linux 2023年6月14日
    0123
  • Redis之延迟监控

    *参考官方文档 *启用 redis 延迟监控 CONFIG SET latency-monitor-threshold 100 单位:毫秒,100表示一百毫秒。如果将 latenc…

    Linux 2023年5月28日
    097
  • 表单校验

    HTML <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Typ…

    Linux 2023年6月13日
    0100
  • Linux lsof命令的使用示例

    Linux命令中,lsof代表 Li St Open Files,用于查看所有被打开的文件,同时显示打开文件相对应的进程。Linux/Unix把一切都看做文件(pipes,sock…

    Linux 2023年6月13日
    091
  • 浅谈DDD中的聚合

    DDD分为战略部分跟战术部分,相信大家都认同DDD的核心在战略而非战术。而战略方面的核心我认为在业务建模,领域划分、统一语言等都在为业务建模服务。 为什么业务建模重要? 以前的开发…

    Linux 2023年6月8日
    0101
  • Ubuntu安装盘的制作

    准备工作 Ubuntu系统镜像 win32diskimager U盘(4G以上),对重要文件提前备份 制作 下载系统镜像 进入官网 我们下载的版本是18.04,不是20.04 在页…

    Linux 2023年6月14日
    0109
  • WEBSHELL-恶意代码检测

    静态查杀 提取特征写成规则库,调用规则库查杀。基于规则,会比较快,但漏报、误报会比较明显,一般的Webshell一句话木马变形混淆会比较多。 yara规则 $eval = /(&l…

    Linux 2023年5月28日
    0126
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球