Java代理Ⅱ

news2024/11/19 11:18:49

目录

静态代理的内存结构图

测试demo

内存图

关于为什么不能直接修改原方法,而是要用代理

参考文章


关于代理我之前写过一篇博客,基本已经讲的差不多了,有兴趣的读者可以去看看

Java代理

最近有了新的感悟,所以记录一下

静态代理的内存结构图

测试demo

接口:明确要代理的目标类的方法

// 连接目标类和代理类的桥梁:接口
public interface Fightable {

    void fight(Integer power);

}

目标类

// 静态代理目标类
public class Hero implements Fightable {

    @Override
    public void fight(Integer power) {
        System.out.println("英雄战斗力为" + power);
    }
}

代理类

public class HeroProxy implements Fightable {

    private Hero hero = new Hero();

    @Override
    public void fight(Integer power) {
        // 功能增强+访问控制
        power++;
        hero.fight(power);

    }
}

测试运行demo

public class ToRun {

    public static void main(String[] args) {

        HeroProxy heroProxy = new HeroProxy();

        heroProxy.fight(5);

    }
}

运行结果:

内存图

其实代理的本质就是简介调用方法,我们可以通过内存图清晰的看到这一点

创建HeroProxy对象之后

执行HeroProxy对象的fight方法

关于为什么不能直接修改原方法,而是要用代理

1. 代理类有可能是外部的jar包当中的类,不能修改

2. 规范的代码习惯,单个方法只履行单个职责,同时一个方法最好不要超过80行,这样写出来的代码可读性以及可维护性(易于测试找bug,一次只测一个功能)都比较好

3.  代码耦合性太高,一旦某次新增/删除/修改的功能代码出现了bug,会导致整个方法无法被调用;如果使用代理,则最多代理方法出现问题(也就是所谓的解耦)

4. 代理可以在不修改原代码的基础上,扩展和增强实现,还能隐藏部分实现过程和细节

5. 代理具有更好的灵活性,随时可以增删改功能,还可以调换功能的增强顺序

参考文章

廖雪峰的官方网站-代理

10分钟看懂动态代理设计模式

Java程序中的代理作用和应用场景及实现

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

线路和绕组中的波过程(一)

本篇为本科课程《高电压工程基础》的笔记。 本篇为这一单元的第一篇笔记。下一篇传送门。 当电路中的设备(元件)最大实际尺寸l大于人们所感兴趣的谐波波长 λ \lambda λ时,可以作为集中参数处理,否则就要当做分布参数处理。即&…

一键开启,盲盒小程序里的梦幻奇遇

在这个充满惊喜与未知的数字时代,盲盒小程序以其独特的魅力成为了许多人的新宠。只需一键开启,你就能踏入一个充满梦幻奇遇的世界,探索未知的惊喜与乐趣。 盲盒小程序不仅仅是一个简单的购物平台,它更是一个充满神秘与惊喜的宝藏库…

数据结构之链表篇

今天我们讲我们数据结构的另一个重要的线性结-----链表, 什么是链表 链表是一种在 物理存储上不连续,但是在逻辑结构上通过指针链接下一个节点的形成一个连续的结构。 他和我们的火车相似,我们的元素是可以类比成车厢,需要将⽕…

web前端学习笔记10

10. CSS3基础 10.1 圆角 CSS3可以设置边框的圆角,其属性是border-radius,可以通过圆角属性制作出各种形状的图形和圆角效果。10.1.1 圆角 border-radius的四个属性值按顺时针排列,对应四个不同的圆角 案例代码 <!DOCTYPE html> <html lang="en"><…

杰发科技AC7801——ADC之Bandgap和内部温度计算

0. 参考 电流模架构Bandgap设计与仿真 bandgap的理解&#xff08;内部带隙电压基准&#xff09; ​ ​ 虽然看不懂这些公式&#xff0c;但是比较重要的一句应该是这个&#xff1a;因为传统带隙基准的输出值为1.2V ​ 1. 使用 参考示例代码。 40002000是falsh控制器寄…

Vue3专栏项目 -- 三、使用vue-router 和 vuex(上)

前面我们开发了两个页面的组件&#xff0c;现在我们需要把它们分成几个页面了&#xff0c;那么一个网页多个页面我们都熟悉&#xff0c;针对不同的url渲染不同的html静态页面&#xff0c;这是web世界的基本工作方式。 有时候我们点击一个东西&#xff0c;地址栏的路由跳转&…

DSP ARM FPGA 实验箱_音频处理_滤波操作教程:3-9 音频信号的滤波实验

一、实验目的 掌握Matlab辅助设计滤波器系数的方法&#xff0c;并实现音频混噪及IIR滤波器滤除&#xff0c;并在LCD上显示音频信号的FFT计算结果。 二、实验原理 音频接口采用的是24.576MHz&#xff08;读兆赫兹&#xff09;晶振&#xff0c;实验板上共有3个音频端口&#x…

JavaScript基础(六)

break & continue continue跳出本次循环&#xff0c;继续下面的循环。 break跳出终止循环。 写个简单的例子: <script> for (var i1; i<5; i){ if (i3){ continue; } console.log(i); } </script> 结果就是跳过i等于3的那次循环&#xff0c;而break: f…

大势所趋!企业网站HTTPS升级全面普及化

JoySSL官网 注册码230918 HTTPS加密协议的应用无疑是维护网络信息安全的重要一环。随着技术的不断进步与用户隐私意识的增强&#xff0c;HTTPS加密已不再仅仅是大型企业的专属&#xff0c;而是逐渐成为所有企业网站的标准配置&#xff0c;其普及化趋势显而易见&#xff0c;堪称…

人工智能|深度学习——PlotNeuralNet简单教程

一、简介 PlotNeuralNet是一个强大的开源Python库,它专为简化和美化神经网络图的绘制而设计 二、安装 需要下载的工具包括&#xff1a;MikTeX&#xff0c;Python代码编辑器&#xff08;这个肯定会有的吧&#xff09;&#xff0c;Git bash&#xff08;可选&#xff09;&#xff…

惠海 H6391 升压恒压芯片IC 2.6-5V升12V/18V方案 内置MOS 高效率 低功耗

升压恒压芯片IC的工作原理主要基于电感和电容的存储能量特性&#xff0c;以及脉宽调制&#xff08;PWM&#xff09;技术。在升压过程中&#xff0c;芯片内部包含了如输入滤波电容、续流二极管、升压电感、开关管、输出滤波电容等部分。当开关管处于导通状态时&#xff0c;电感中…

牛客小白月赛93

B交换数字 题目&#xff1a; 思路&#xff1a;我们可以知道&#xff0c;a*b% mod (a%mod) * (b%mod) 代码&#xff1a; void solve(){int n;cin >> n;string a, b;cin >> a >> b;for(int i 0;i < n;i )if(a[i] > b[i])swap(a[i], b[i]);int num1…

[Algorithm][递归][斐波那契数列模型][第N个泰波那契数][三步问题][使用最小花费爬楼][解码方法]详细讲解

目录 1.第 N 个泰波那契数1.题目链接2.算法原理详解3.代码实现 2.三步问题1.题目链接2.算法原理详解3.代码实现 3.使用最小花费爬楼梯1.题目链接2.算法原理详解3.代码实现 4.解码方法1.题目链接2.算法原理详解3.代码实现 1.第 N 个泰波那契数 1.题目链接 第 N 个泰波那契数 2…

mysql中sql语句 exists 判断子句的用法

如果子查询成立才执行父查询 exists判断子查询的使用例子&#xff1a; 张三不存在所以前面的父查询不执行 后面的子句结果存在&#xff0c;所以前面的父查询被执行 where条件所连接的嵌套子查询都是&#xff0c;条件子查询 ———————————————————————…

SSM【Spring SpringMVC Mybatis】——Mybatis(二)

如果对一些基础理论感兴趣可以看这一期&#x1f447; SSM【Spring SpringMVC Mybatis】——Mybatis 目录 1、Mybatis中参数传递问题 1.1 单个普通参数 1.2 多个普通参数 1.3 命名参数 1.4 POJO参数 1.5 Map参数 1.6 Collection|List|Array等参数 2、Mybatis参数传递【#与…

数据结构与算法学习笔记八-二叉树的顺序存储表示法和实现(C语言)

目录 前言 1.数组和结构体相关的一些知识 1.数组 2.结构体数组 3.递归遍历数组 2.二叉树的顺序存储表示法和实现 1.定义 2.初始化 3.先序遍历二叉树 4.中序遍历二叉树 5.后序遍历二叉树 6.完整代码 前言 二叉树的非递归的表示和实现。 1.数组和结构体相关的一些知…

Ps 滤镜:蒙尘与划痕

Ps菜单&#xff1a;滤镜/杂色/蒙尘与划痕 Filter/Noise/Dust & Scratch 蒙尘与划痕 Dust & Scratch滤镜可用于修复图像中的小瑕疵、尘埃或划痕&#xff0c;特别适合用于清理扫描的照片或老照片中的损伤&#xff0c;以及其他因拍摄条件不理想或相机传感器上的尘埃所造成…

网络安全防护:抵御DDoS和CC攻击

在当今数字化时代&#xff0c;网络安全已成为任何组织或个人不可忽视的重要议题。DDoS&#xff08;分布式拒绝服务&#xff09;攻击和CC&#xff08;命令与控制&#xff09;攻击作为两种最为常见的网络攻击方式&#xff0c;给网络运营者和用户带来了巨大的威胁和影响。本文将介…

Acrobat Pro DC 2023 for Mac:PDF处理的终极解决方案

Acrobat Pro DC 2023 for Mac为Mac用户提供了PDF处理的终极解决方案。它具备强大的文档处理能力&#xff0c;无论是查看、编辑还是创建PDF文件&#xff0c;都能轻松胜任。在编辑功能方面&#xff0c;Acrobat Pro DC 2023支持对文本、图像进行精准的修改和调整&#xff0c;还能添…

回溯法、全排列、子集等

回溯法 感想&#xff1a;回溯算法本质是一个循环&#xff0c;有点像while循环 一些回溯法&#xff08;递归&#xff09;的经典应用 1.全排列 2.子集 其实上面两个点&#xff0c;也是对应着高中数学里面的“排列”与“组合” 1.全排列问题 给定一个集合S{a,b,c}&#xff0…