改变世界的 17 个数学公式
自从走进了哲学世界与数学世界,以前对数学和世界的认知很浅薄,虽然现在也很浅薄,但是由否定之否定哲学思想可得:此浅薄非彼浅薄,还是有丢丢进步。
它不足为你揭示全部问题的答案,但若能让人胸中升起一朵朵疑云,也未尝不会酿成晚霞斑斓的别一番景致,万一它居然给你带来了一场精神世界的苦雨,那就借机洗刷一下原来存放在那儿的“真理”上的尘埃吧。
或许,雨过云收,神驰的天地更清朗.......
1、勾股定理
英文:
Pythagoras’ Theorem
公式:
定义:
在平面上的一个直角三角形中,两个直角边边长的平方加起来等于斜边长的平方。
这个基本几何定理,在公元前11世纪,数学家商高(西周初年人)就提出“勾三、股四、弦五”。
而在西方,希腊数学家毕达哥拉斯在公元前6世纪证明了勾股定理,因而西方人都习惯地称这个定理为毕达哥拉斯定理(Pythagoras’ Theorem)。
“老毕”还证明过黄金分割线,他创办的毕达哥斯拉学派是古希腊四大门派之一。
勾股定理被认为是论证几何的发端,它是历史上第一个把数与形联系起来的定理,也是历史上第一个给出了完全解答的不定方程。
这条定理不仅在几何学中是一颗光彩夺目的明珠,更是被誉为“几何学的基石”。
2、对数
英文:
Logarithms
公式:
定义:
如果a的x次方等于N(a>0,且a≠1),那么数x叫做以a为底N的对数。
对数方法是由数学家约翰·皮纳尔在1614年发明。
但这个方法无论是放在当时还是现在,都具有重要意义,它的出现让许多繁难的计算成为了可能。
也正因如此,在计算器和计算机出现之前,它持久地被用于测量、航海以及其他实用数学分支中。
3、微积分
英文:
Calculus
公式:
此处给出的公式,是微积分中导数的定义。
其实微积分是高等数学中研究函数的微分(Differentiation)、积分(Integration)以及有关概念和应用的数学分支。
微分学包括求导数的运算,是一套关于变化率的理论。它使得函数、速度、加速度和曲线的斜率等均可用一套通用的符号进行讨论。
而积分学,包括求积分的运算,为定义和计算面积、体积等提供一套通用的方法。
冯·诺依曼曾经这样评价微积分:
它是现代数学的第一个成就,而且怎样评价它的重要性都不为过。
我认为,微积分比其他任何事物都更清楚地表明了现代数学的发端;而且,作为其逻辑发展的数学分析体系仍然构成了精密思维中最伟大的技术进展。
许多初等数学无法解决的问题,微积分往往都可以迎刃而解,而且许多自然现象也可以通过建立微分方程来描述。
也正因如此,微积分广泛地被应用于运动学、天文学、经济学、社会学、化学、生物学等。
4、万有引力定律
英文:
Law of Gravity
公式:
定义:
任何两个质点都存在通过其连心线方向上的相互吸引的力:
该引力大小与它们质量的乘积成正比与它们距离的平方成反比,与两物体的化学组成和其间介质种类无关。
其中,F表示两个物体之间的引力;G表示万有引力常量;m1和m2分别表示物体1和物体2的质量;r则是两个物体之间的距离(大小)。
万有引力定律是牛顿于1687年在《自然哲学的数学原理》上所发表,可以说是17世纪自然科学最伟大的成果之一。
他用万有引力定律证明了开普勒定律、月球绕地球的运动、潮汐的成因和地球两极较扁等自然现象。
因此,牛顿的万有引力定律是天体力学的基础。人造卫星、月球和行星探测器的轨道,都是以这个定律为基础来计算的。
5、-1的平方根
英文:
The square root of -1
公式:
数学家们一直在对数字的概念做着拓展工作,例如从自然数到负数、分数,再到实数。
而在16世纪,意大利米兰学者卡当首次引入了复数的概念。
经过达朗贝尔、棣莫弗、欧拉、高斯等人的工作,这个概念逐渐被数学家接受。
从数学角度来看,复数可以说是极其优雅,任何方程都有一个复数解,但这种情况在实数却不成立。
例如,对于x2 + 4 = 0,就是没有实数解的,而放眼复数,解就是-4或2i。
而微积分也是可以拓展到复数,数学家们由此还发现了一些数所具备的对称性和性质。
这些特性便使得复数在电子学和信号处理中起到了重要的作用。
6、多面体欧拉定理
英文:
Euler’s Polyhedra Formula
公式:
定义:
对于n维空间中的简单多面体,其零维对象数(即顶点数)D0、一维对象数(即边数)D1、二维对象数(即面数)D2、三维对象数(即体数)D3、……、n维对象数Dn:
其中符号为正负号交替出现,等式一边是各维对象数的重复加减,等式另一边是1。
一般以V(Vertex)表示零维对象(即顶点)数D0,以E(Edge)表示一维对象(即边、棱)数D1,以F(Flat surface)表示二维对象(即面)数D2,以S(Solid)表示三维对象(即体)数D3,以P表示四维对象数D4。
对于一般的三维空间,该公式表达为:V - E + F - S= 1。
由于对于一个三维物体,其体数S总是1,因此就得到上述的那个公式。
欧拉的这项观察,现在被视为拓扑不变性的最早的例子之一。
连同他对柯尼斯堡桥问题的解决,可以说是为拓扑学的发展铺平了道路,使其成为现代物理学必不可少的一个数学分支。
这也是马斯克喜欢的公式,翻译过来就是:eiπ + 1 = 0,即被称为史上最美公式的欧拉公式。
7、 正态分布
正态分布(Normal distribution),也称“常态分布”,又名高斯分布(Gaussian distribution),最早由棣莫弗(Abraham de Moivre)在求二项分布的渐近公式中得到。C.F.高斯在研究测量误差时从另一个角度导出了它。P.S.拉普拉斯和高斯研究了它的性质。是一个在数学、物理及工程等领域都非常重要的概率分布,在统计学的许多方面有着重大的影响力。
正态曲线呈钟型,两头低,中间高,左右对称因其曲线呈钟形,因此人们又经常称之为钟形曲线。
若随机变量X服从一个数学期望为μ、方差为σ2的正态分布,记为N(μ,σ2)。其概率密度函数为正态分布的期望值μ决定了其位置,其标准差σ决定了分布的幅度。当μ = 0,σ = 1时的正态分布是标准正态分布。
8、波动方程
历史上许多科学家,如达朗贝尔、欧拉、丹尼尔·伯努利和拉格朗日等在研究乐器等物体中的弦振动问题时,都对波动方程理论作出过重要贡献。
弦振动方程是在18世纪由达朗贝尔(d'Alembert)等人首先系统研究的,它是一大类偏微分方程的典型代表。
波动方程或称波方程(英语:Wave equation) 由麦克斯韦方程组导出的、描述电磁场波动特征的一组微分方程,是一种重要的偏微分方程,主要描述自然界中的各种的波动现象,包括横波和纵波,例如声波、光波和水波。波动方程抽象自声学,电磁学,和流体力学等领域。
9、傅里叶变换
傅立叶变换,表示能将满足一定条件的某个函数表示成三角函数(正弦和/或余弦函数)或者它们的积分的线性组合。
在不同的研究领域,傅立叶变换具有多种不同的变体形式,如连续傅立叶变换和离散傅立叶变换。最初傅立叶分析是作为热过程的解析分析的工具被提出的。
尽管最初傅里叶分析是作为热过程的解析分析的工具,但是其思想方法仍然具有典型的还原论和分析主义的特征。"任意"的函数通过一定的分解,都能够表示为正弦函数的线性组合的形式,而正弦函数在物理上是被充分研究而相对简单的函数类,这一想法跟化学上的原子论想法何其相似!奇妙的是,现代数学发现傅里叶变换具有非常好的性质,使得它如此的好用和有用,让人不得不感叹造物的神奇:
- 傅里叶变换是线性算子,若赋予适当的范数,它还是酉算子;
- 傅里叶变换的逆变换容易求出,而且形式与正变换非常类似;
- 正弦基函数是微分运算的本征函数,从而使得线性微分方程的求解可以转化为常系数的代数方程的求解.在线性时不变的物理系统内,频率是个不变的性质,从而系统对于复杂激励的响应可以通过组合其对不同频率正弦信号的响应来获取;
- 著名的卷积定理指出:傅里叶变换可以化复杂的卷积运算为简单的乘积运算,从而提供了计算卷积的一种简单手段;
- 离散形式的傅里叶变换可以利用数字计算机快速的算出(其算法称为快速傅里叶变换算法(FFT)).
正是由于上述的良好性质,傅里叶变换在物理学、数论、组合数学、信号处理、概率、统计、密码学、声学、光学等领域都有着广泛的应用。
10、纳维-斯托克斯方程
纳维-斯托克斯方程(Navier-Stokes equation)是描述粘性不可压缩流体动量守恒的运动方程,简称N-S方程。此方程是法国科学家C·L·M·H·纳维于1821年和英国物理学家G·G·斯托克斯于1845年分别建立的,故名。它的矢量形式为:
纳维-斯托克斯方程(英文名:Navier-Stokes equations),描述粘性不可压缩流体动量守恒的运动方程。简称N-S方程。粘性流体的运动方程首先由纳维在1827年提出,只考虑了不可压缩流体的流动。泊松在1831年提出可压缩流体的运动方程。圣维南与斯托克斯在1845年独立提出粘性系数为一常数的形式,都称为Navier-Stokes方程,简称N-S方程。三维空间中的N-S方程组光滑解的存在性问题被美国克雷数学研究所设定为七个千禧年大奖难题之一。
后人在此基础上又导出适用于可压缩流体的N-S方程。以应力表示的运动方程,需补充方程才能求解。N-S方程反映了粘性流体(又称真实流体)流动的基本力学规律,在流体力学中有十分重要的意义。它是一个非线性偏微分方程,求解非常困难和复杂,在求解思路或技术没有进一步发展和突破前只有在某些十分简单的特例流动问题上才能求得其精确解;但在部分情况下,可以简化方程而得到近似解。例如当雷诺数
时,绕流物体边界层外 ,粘性力远小于惯性力 ,方程中粘性项可以忽略,N-S方程简化为理想流动中的欧拉方程;而在边界层内,N-S方程又可简化为边界层方程,等等。在计算机问世和迅速发展以来,N-S方程的数值求解才有了较大的发展。
11 麦克斯韦方程组
麦克斯韦方程组,是英国物理学家詹姆斯·克拉克·麦克斯韦在19世纪建立的一组描述电场、磁场与电荷密度、电流密度之间关系的偏微分方程。它由四个方程组成:描述电荷如何产生电场的高斯定律、论述磁单极子不存在的高斯磁定律、描述电流和时变电场怎样产生磁场的麦克斯韦-安培定律、描述时变磁场如何产生电场的法拉第感应定律。
从麦克斯韦方程组,可以推论出电磁波在真空中以光速传播,并进而做出光是电磁波的猜想。麦克斯韦方程组和洛伦兹力方程是经典电磁学的基础方程。从这些基础方程的相关理论,发展出现代的电力科技与电子科技。
麦克斯韦在1865年提出的最初形式的方程组由20个等式和20个变量组成。他在1873年尝试用四元数来表达,但未成功。现在所使用的数学形式是奥利弗·赫维赛德和约西亚·吉布斯于1884年以矢量分析的形式重新表达的。
12 热力学第二定律
这个定理是爱因斯坦等先贤认为最接近于真理的定律:
1824年,法国工程师萨迪·卡诺提出了卡诺定理。德国人克劳修斯(Rudolph Clausius)和英国人开尔文(Lord Kelvin)在热力学第一定律建立以后重新审查了卡诺定理,意识到卡诺定理必须依据一个新的定理,即热力学第二定律。他们分别于1850年和1851年提出了克劳修斯表述和开尔文表述。这两种表述在理念上是等价的。
13 爱因斯坦的质能方程
值得一提的是,原子弹的出现和著名的质能关系式(E=mc2)关系不大,而爱因斯坦本人也肯定了这一点。质能关系式只是解释原子弹威力的数学工具而已,对实作原子弹意义不大。
爱因斯坦提出的质能关系式是相对论动力学的一个重要成果,在狭义相对论中占有重要的位置。
爱因斯坦质能关系式指出质量和能量这两个重要物理量之间密不可分的联系:一个物体的质量与它的能量之间有确定的数量关系
;具有能量E的任何物质客体,同时具有质量m;具有一定质量m的物质客体也必具有和这质量相关的能量E。因此,质量不仅可作为物体惯性的量度,也可作为它能量的量度。也就是说,爱因斯坦质能关系式反映了物质的两个基本属性——质量和能量之间存在着的普遍关系和不可分割的联系:物体的质量与能量有固定的比例关系,它们是相互联系、相互制约的物质属性,不是绝对对立和分离的;质量和能量同属物质的属性,它们互以对方的存在为自己存在的前提,世界上没有脱离质量的能量,也没有脱离能量的质量;有质量就有能量,有能量就有质量,不能把能量和质量分割开来。
相对论的这个发现,不仅推翻了把质量和能量“非此即彼”绝对化的形而上学的观点,而且深刻地反映出任何物质自身属性“变与不变”的对立统一。在一定意义上也表现了物质和运动的不可分割性:物质总是在运动,运动总是指物质的运动;没有不运动的物质,也没有无物质的运动。
14 稳态非线性方程
Schrodinger方程是量子力学中的基本方程。 非线性Schrodinger方程出现在很多重要的物理模型中,例如非线性光学,凝聚态物理等。对非线性Schrodinger方程驻波解的研究可转化为对一类非线性椭圆型偏微分方程,即稳态形式的非线性Schrodinger方程的研究。本项目主要研究稳态非线性Schrodinger方程中一类有物理意义的解- - 束缚态(bound state)的存在性及相关性质。我们拟解决的问题是:
1. 如果位势函数变号并且在无穷远处的极限等于零,方程束缚态的存在性。
2.如果位势函数在无穷远处的极限等于零,方程变号解的存在性以及解的分歧性质。我们想通过这些问题的研究更加深刻的了解位势函数在无穷远处的衰减行为对方程解的存在性的影响。
15、信息熵
香农被称为是“信息论之父”。人们通常将香农于1948年10月发表于《贝尔系统技术学报》上的论文《A Mathematical Theory of Communication》(通信的数学理论)作为现代信息论研究的开端。这一文章部分基于哈里·奈奎斯特和拉尔夫·哈特利先前的成果。在该文中,香农给出了信息熵(以下简称为“熵”)的定义:
信息论是运用概率论与数理统计的方法研究信息、信息熵、通信系统、数据传输、密码学、数据压缩等问题的应用数学学科
上一篇: 图像重建] 基于三维离散余弦变换实现图像的快速压缩重建与 Matlab 代码
下一篇: 电力系统趋势计算(Newton-Raphson、Gauss-Seidel、快速解耦)(Matlab 代码实现)
推荐阅读
-
贝尔实验室(Bell Labs)改变世界的十大发明
-
猫和老鼠震撼斜塔?过山车?沙发上的斯派克?三个改变游戏规则的新角色
-
35 岁实现财务*,腾讯程序员手握2300万提前退休?-1000万房产、1000万腾讯股票、加上300万的现金,一共2300万的财产。有网友算了一笔账,假设1000万的房产用于自住,剩下1300万资产按照平均税后20-50万不等进行计算,大约花上26-60年左右的时间才能赚到这笔钱。也就是说,普通人可能奋斗一辈子,才能赚到这笔钱。在很多人还在为中年危机而惶惶不可终日的时候,有的人的35岁,就已经安全着陆,试问哪个打工人不羡慕?但问题是有这样财富积累必然有像样的实力做靠山。没有人可以不劳而获。 看到这里,肯定有人说,那么对于普通人来说,卷可能真就成了唯一的出路。但是卷也有轻松的卷,“偷懒”的卷法,对于程序员而言,刨除掉一时无法改掉的开会传统占用的大部分时间,如何把有限的时间和精力放在真正重要的架构设计、需求设计上,而不是重复的造*,编码、改bug、手动测试。因此在科技改变生活的今天,学会使用AI工具成为程序员们的必备技能。 以全栈式全自动的软件开发工具飞算SoFlu软件机器人为例,作为全球首款面向微服务架构设计和最佳实践的软件机器人,SoFlu软件机器人改变了原来手工编码的作业模式,通过可视化拖拽方式以及参数配置就能实现等同于编写复杂代码的业务逻辑,在设计业务逻辑时就完成了微服务应用开发,做到“业务即图,图即代码”,实现“软件开发,十倍提效”。 而作为飞算SoFlu软件机器人的一个重要组成部分,FuncGPT(慧函数)支持所有类型函数创建。通过自然语言描述Java函数需求,实时生成高质量、高可读性的Java函数代码。生成代码可直接复制到IDEA,或一键导入Java全自动开发工具函数库。 FuncGPT(慧函数)具有五大核心能力: ● 自然语言:通过自然语言即可生成函数,降低软件开发门槛。 ● 秒级函数开发:全自动秒级开发函数,秒级完成,效率千倍提升。 ● 一站式函数开发应用:函数生成即可直接应用,效率、安全有保障。 ● 质量可靠:生成的函数代码符合业界规范、具备良好的可读性,符合最优解。 ● 灵活生成:可以根据开发人员的具体需求生成并支持调整和修改。 以“将文件流转换为File对象”这个需求为例,以下是FuncGPT(慧函数)秒级生成的代码: / 类名:FileConverter // 函数名:convertStreamToFile // 函数功能:将文件流转换为File对象 // POM依赖包:无 import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; public class FileConverter { /** * 将文件流转换为File对象 * @param inputStream 文件流 * @param filePath 文件路径 * @param fileName 文件名 * @return 转换后的File对象 * @throws IOException 如果发生I/O异常 */ public static File convertStreamToFile(InputStream inputStream, String filePath, String fileName) throws IOException { File file = new File(filePath + File.separator + fileName); // 创建File对象 try (FileOutputStream outputStream = new FileOutputStream(file)) { // 创建文件输出流 byte buffer = new byte[1024]; int bytesRead; while ((bytesRead = inputStream.read(buffer)) != -1) { // 从文件流读取数据并写入文件 outputStream.write(buffer, 0, bytesRead); } } return file; // 返回转换后的File对象 } } // 函数示例 // 将文件流转换为File对象示例 // 入参:inputStream,文件流 // 入参:filePath,文件路径 // 入参:fileName,文件名 // 出参:file,转换后的File对象 // 调用示例: // InputStream inputStream = new FileInputStream("example.txt"); // String filePath = "C:\\Users\\User\\Documents"; // String fileName = "example.txt"; // File file = FileConverter.convertStreamToFile(inputStream, filePath, fileName); // System.out.println(file.getAbsolutePath); // 输出结果:例如,将文件流转换为File对象后,文件的绝对路径为:C:\Users\User\Documents\example.txt // 则输出结果为:C:\Users\User\Documents\example.txt 通过分析,不难发现以上代码:
-
位、字节、WORD、DWORD 的区别和联系 - Unicode 和 ANSI 的区别就像输入法中 "全宽 "和 "半宽 "的区别一样。 由于不同的 ANSI 编码有不同的标准(不同的字符集),对于给定的多字节字符串,我们必须知道它使用的是哪种字符集,才能知道它包含哪些 "字符"。对于 UNICODE 字符串来说,无论环境如何,它所代表的 "字符 "内容始终是相同的。Unicode 有一个统一的标准,定义了世界上大多数字符的编码,因此拉丁文、数字、简体中文、繁体中文和日文都可以存储在一个编码中。统一码是一个统一的标准,定义了世界上大多数字符的编码。 比特(Bit)和字节(Byte)的区别:例如USB2.0 标准接口的传输速率为 480Mbps,有一些人误认为是每秒 480 兆比特,同样网络带宽为 2MB,就容易误认为是每秒 2 兆比特。其实,480Mbps 应该是 480 兆比特/秒或 480 兆字节/秒,它等于 "60 兆字节/秒";同样,2MB,应该是 256 兆字节/秒。 Bit 和 Byte 译为 "比特",都是数据计量单位,比特="位 "或 "比特"。 Byte = 字节,即 1byte = 8bits,两者的换算关系为 1:8。 Mbps = mega bits per second(兆位/秒)是速率单位,因此 2M 带宽应为 2 兆位/秒,即 2MBps。MB = 兆字节(Megabytes,兆字节)是单位量,1MB/S(兆字节/秒)= 8MBPS(兆字节/秒)。 通常所说的硬盘容量是指 40GB、80GB、100GB,其中的 B 是指 Byte 也称为 "字节"。 1 KB=1024 字节 1 MB=1024 KB=1024*1024 字节 1 GB=1024 MB=1024*1024*1024 字节 例如,以前所谓的 56KB MODEM 转换过来的 56KBps 除以 8 就是 7Kbyte,所以真正从网上下载文件存在硬盘上的速度也是每秒 7Kbyte;也就是说,用 B 表示传输速度一般指 Bit;用 B 表示容量一般指 Byte。比特、字节、WORD、DWORD 的本质。
-
改变世界的 50 把椅子(二)
-
jdk17 安装 elasticsearch8 时的一个陷阱
-
世界第八大未解之谜是一个名叫景甜的女孩!
-
哥德尔、埃舍尔、巴赫--两个世界的精华。
-
一种结构设计模式,允许在对象中动态添加新行为。它通过创建一个封装器来实现这一目的,即把对象放入一个装饰器类中,然后把这个装饰器类放入另一个装饰器类中,以此类推,形成一个封装器链。这样,我们就可以在不改变原始对象的情况下动态添加新行为或修改原始行为。 在 Java 中,实现装饰器设计模式的步骤如下: 定义一个接口或抽象类作为被装饰对象的基类。 公共接口 Component { void operation; } } 在本例中,我们定义了一个名为 Component 的接口,该接口包含一个名为 operation 的抽象方法,该方法定义了被装饰对象的基本行为。 定义一个实现基类方法的具体装饰对象。 公共类 ConcreteComponent 实现 Component { public class ConcreteComponent implements Component { @Override public void operation { System.out.println("ConcreteComponent is doing something...") ; } } 定义一个抽象装饰器类,该类继承于基类,并将装饰对象作为一个属性。 公共抽象类装饰器实现组件 { protected Component 组件 public Decorator(Component component) { this.component = component; } } @Override public void operation { component.operation; } } } 在这个示例中,我们定义了一个名为 Decorator 的抽象类,它继承了 Component 接口,并将被装饰对象作为一个属性。在操作方法中,我们调用了被装饰对象上的同名方法。 定义一个具体的装饰器类,继承自抽象装饰器类并实现增强逻辑。 公共类 ConcreteDecoratorA extends Decorator { public ConcreteDecoratorA(Component 组件) { super(component); } } public void operation { super.operation System.out.println("ConcreteDecoratorA 正在添加新行为......") ; } } 在本例中,我们定义了一个名为 ConcreteDecoratorA 的具体装饰器类,它继承自装饰器抽象类,并实现了操作方法的增强逻辑。在操作方法中,我们首先调用被装饰对象上的同名方法,然后添加新行为。 使用装饰器增强被装饰对象。 公共类 Main { public static void main(String args) { Component 组件 = new ConcreteComponent; component = new ConcreteDecoratorA(component); 组件操作 } } 在这个示例中,我们首先创建了一个被装饰对象 ConcreteComponent,然后通过 ConcreteDecoratorA 类创建了一个装饰器,并将被装饰对象作为参数传递。最后,调用装饰器的操作方法,实现对被装饰对象的增强。 使用场景 在 Java 中,装饰器模式被广泛使用,尤其是在 I/O 中。Java 中的 I/O 库使用装饰器模式实现了不同数据流之间的转换和增强。 让我们打开文件 a.txt,从中读取数据。InputStream 是一个抽象类,FileInputStream 是专门用于读取文件流的子类。BufferedInputStream 是一个支持缓存的数据读取类,可以提高数据读取的效率,具体代码如下: @Test public void testIO throws Exception { InputStream inputStream = new FileInputStream("C:/bbb/a.txt"); // 实现包装 inputStream = new BufferedInputStream(inputStream); byte bytes = new byte[1024]; int len; while((len = inputStream.read(bytes)) != -1){ System.out.println(new String(bytes, 0, len)); } } } } 其中 BufferedInputStream 对读取数据进行了增强。 这样看来,装饰器设计模式和代理模式似乎有点相似,接下来让我们讨论一下它们之间的区别。 第三,与代理模式的区别: 代理模式的目的是控制对对象的访问,它在对象外部提供一个代理对象来控制对原对象的访问。代理对象和原始对象通常实现相同的接口或继承相同的类,以确保两者可以相互替换。 装饰器模式的目的是动态增强对象的功能,而这是通过对象内部的包装器来实现的。在装饰器模式中,装饰器类和被装饰对象通常实现相同的接口或继承自相同的类,以确保两者可以相互替代。装饰器模式也被称为封装器模式。 在代理模式中,代理类附加了与原类无关的功能。
-
国家聊天GPT:在技术狂潮之下,拥有梦想的元宇宙正在改变世界