用实战项目经验告诉你什么是二方包!

深入理解 Maven 中的一方包、二方包与三方包 在 Maven 项目管理的世界里,一方包、二方包和三方包是经常被提及的概念。清晰地认识它们对于构建高效、可维护的项目具有极为重要的意义。 阅读详情
AI摘要

本文深入探讨了项目结构中的模块化管理和二方包的合理运用,通过实例解析了如何有效避免代码冗余,确保系统维护性和扩展性。作者分享了在系统整合过程中的经验教训,强调了清晰的项目架构对于团队协作的重要性。

前言

只有光头才能变强。

文本已收录至我的GitHub精选文章,欢迎Star:https://github.com/ZhongFuCheng3y/3y

最近在整合各种的系统,在这个过程中遇到了各种的问题,三歪今天来分享一下关于「项目结构」或者说「二方包」的事。

我们先不聊「二方包」,因为初学或者还没工作的同学可能没听过这个词。

初学的时候或者刚做项目的时候,我们的项目架构是怎么样的呢?我翻出了我在大学的时候写的小Demo:

可以看到的是,我们的项目只有一个Module,里边我们分各种的包:dao/service/controller/utils...等等。

这看起来好像没啥问题吧?

我们去到公司里边,可能看到的项目都分了多个Module,比如下图:

有什么区别呢?我们用一个Module在里边分各种的子包,看起来也还行。为什么我们要分多个Module呢?

我个人认为原因是这样的:Maven本身就支持多模块(Module)的管理,将不同的层分出来,项目看起来更加清晰,在改动的时候针对某个模块去变更就好了。

  • 比如,我把dao层分成一个模块,当我变更dao这个模块的时候,我只需要关心这个模块就好了,不需要关心service模块或者web模块
  • 举个例子:每层几乎都会有自己的配置信息(配置文件),数据访问层会有数据库的配置文件、业务层也会有对应的配置文件。我们抽出多个Module(不同的Module放属于自己的配置文件),从代码结构层面上会显得更加清晰。

我们写完的代码是需要维护的,可维护性很重要。

很多编程方式客观上没有对错之分,一致性很重要,可读性很重要,团队沟通效率很重要。程序员天生需要团队协作,而协作的正能量要放在问题的有效沟通上。个性化应尽量表现在系统架构和算法效率的提升上,而不是在合作规范上进行纠缠不休的讨论、争论,最后没有结论。

二方包

当年我看《阿里巴巴开发手册》的时候也写过一篇总结,当时的文章也提到了那时候不咋懂二方包,现在我回来填坑了。

首先来科普一下什么是二方库?(二方库也叫·)

  • 一方库指的是本项目中的依赖
  • 二方库指的是公司内部其他项目提供的依赖
  • 三方库指的是其他组织、公司等来自第三方的依赖

如果看过我之前文章的同学都知道,三歪在公司目前维护的是消息管理平台,全公司发送的消息都会经过我的系统。

我会打个「二方包」到公司的Maven仓库,然后他们引入我的pom依赖,调用我的接口去下发消息。

假如我没有分Module,所有的代码都写在同一个Module下,那我发到公司的Maven仓库会发生什么?打包(deploy)这个过程是没毛病的。

如果他们依赖了我这个没有处理过的二方包,相当于把我整个工程给依赖进去了,这是非常可怕的。

如果有从零搭过系统或者整合过系统的同学会知道,这个过程有会有多「版本」的坑。只要版本不一致,就会出现一大堆奇奇怪怪的问题,并且这些问题都不太好解决。

所以,一般我们的二方包都应该是很清爽的。比如我提供的二方包,它就只有接口和接口所需要的实体,没有杂余的繁琐依赖。

业务方是不关心接口的实现的,我们只需要暴露接口就好了。

三歪一次经历

最近三歪在整合系统嘛,分享一次经历。

我负责的消息管理平台系统的架构是这样的:

可以看到,我所负责的系统是分得很细的(很符合分布式的理念)。从功能上看,这些系统变成一个大工程也不是什么问题,只是这个系统会非常非常大。

消息管理平台除了上面的系统,还有其他的子系统,比如说「ID映射」。这里当初设计的时候也把它当做一个系统给抽出去了。

「ID映射」应该不难理解:业务方传入的是站内的userId,但要发的是短信。我这边要把userId转换成手机号,可以简单理解这个系统就做的这么一个ID转换的功能。

现在要规划把这个「ID映射」给整合起来,原有的机器要下线了,要把这个服务的功能给整到消息管理平台的系统中。(为啥要整到我这个架构上?因为本身这个系统就只有我这边在频繁使用)

为啥要整合?现在的潮流可能是把单个系统拆出多个系统做”微服务“,但真正系统多起来未必是一件好事。

一些小的功能其实没必要单独分出来一个系统,这是需要成本的,至少我们机器成本是有的(一个系统我们至少会有四台机器)->两台线上,一台预发,一台线下

OK,说完背景了以后,我们再来看看「ID映射」这个系统的代码架构:

说白了,就是这个工程下有这三个Module,如果你要问我为什么没看到dao层的Module,而是直接放到core 层,问就是当初设计不合理。依我的理解,应该至少是要把数据访问层抽出一个Module。

可以看到的是,这个「ID映射」系统其实也是一个完整的系统,从后台管理页面到数据库都是完整的。

现在要把这个系统给整到消息管理平台的架构下,如果是你,你会怎么弄呢?

其实就两种方式:

  1. 把这个「ID映射」系统整个搬到某一个系统中
  2. 把这个「ID映射」系统通过模块拆出来,分到各个系统中。

最简单的做法肯定是把这个系统的代码搬到另一个系统,然后就可以run起来了。但前人已经把系统分得那么干净了,如果我这样干了,后面接手的人会不会锤我呢?

三歪认为服务相关的代码,应该就整合到专门提供服务的系统。后台相关的代码,就应该整合到后台相关的系统。即便我后台系统发布了,丝毫不影响对外提供的服务。

所以,我决定把「ID映射」的各个Module抽出来,分到不同的系统中。把api层和部分core层的代码的Module分到service系统中,把web层的Module分到admin系统中。

看似是挺完美的,我当初也是这样执行的,于是我顺利把api和core的代码整合到service系统之后,正打算把web的代码整合到admin系统中,遇到了一个问题。

web的代码是controller层,它显然会依赖service层的代码,service层的代码也显然会依赖dao的代码。

现在我已经把api/core层的代码大多数已经迁到了service系统,而admin系统是没有这些代码和依赖的,我需要整个系统是能跑通的,我能怎么办?

此时能想到的有两种方案:

  1. 把service系统的代码再到admin系统中实现。

  2. 现在service系统已经实现好了,打个二方包,然后让admin系统依赖。这里也有两个方案:

    1. 二方包不做任何处理,admin系统直接依赖其所有的实现。
    2. 把admin系统所依赖的接口再出一个api层,admin系统只需要依赖api层,实现远程调用

如果是你,你会选择哪种?我们来分析一下:

  • 第一种方案:service系统的代码再到admin系统实现,这肯定会有代码冗余的情况。毕竟service系统肯定会依赖dao层的,而admin系统最终也是需要依赖dao层。dao层没有完全抽出,在前期就肯定会有代码冗余的情况
  • 第二种方案分支①:将service系统已实现的代码直接打成二方包,admin系统直接引入就没有任何代码冗余的问题。但这会引发其他问题:
    • 直接打成二方包意味着要把所有的实现依赖都打进去,admin系统在引入的时候需要针对这个二方包做一系列的排包操作。(这个非常蛋疼)
    • 其实最致命的是我们干不了。我们的系统在发布的时候是分环境的(线上、预发、线下),我们会在发布的时候根据不同的环境使用不同的配置。如果我们此时直接打个二方包,我们是需要指定环境的,这说明我们只能用一个环境的配置,这是行不通的。
  • 第二种方案分支②:把admin系统所依赖的接口再出一个api层,实现远程调用。从字面上,这是最优雅的方案,但如果admin系统依赖的接口众多的时候,实际践行的时候会发现这工作量巨大。
    • admin系统所依赖的接口有40+个,这些接口所依赖的实体有80+个。我搞了大半天,发现完全搞不动,工作量巨大!!这是单纯的体力活

第二个方案的分支①三歪再来聊聊为什么说干不了,首先我们的实现是有配置的

我们在deploy的时候就必须指定一个环境,比如我们默认选择线上环境的配置好了。打完包以后,这个包默认的环境就是给线上使用的。但是admin系统他还需要在线下环境启动,怎么办?没办法吧?

假设环境配置的问题能解决,等着我们还有各种依赖的问题。admin系统和二方包的依赖冲突了怎么办?

比如说:相同的配置项,不同的配置信息。在service系统上能兼容(毕竟代码都在同一个工程下),但直接打成二方包就没法跟admin系统兼容了。

这只能删除冲突的部分,然后再发包了吧?但冲突是admin系统冲突的,跟我service系统的有啥关系呢?这我要做成一个完美兼容admin和service系统的Module吗?老实说,不太现实。

扯了一大堆,三歪最终选择的是第一个方案。

在初期现在dao层的代码肯定是在admin和service系统上冗余的。service层不好抽取,但dao层还是相对好抽取的啊。

为什么dao和service层的代码不一样?明明我在上面已经讲了怎么多直接抽取二方包的不可行性了。

dao层的代码相较于service层的代码要简单多了,一个合格dao层应该是只管访问数据库,不应该有dao层的代码去调service层的代码的。

代码的简单意味着依赖会很少,比如我们的dao层就应该只有Mybatis和Spring相关的依赖,其余的就不应该有。而前面提到的环境配置的问题,我们可以交给业务方去实现,不在dao层上做任何配置信息,开个hook给业务方去做。

像三歪这种”微服务“系统,本应该要把dao层给抽出来。再回看我的系统架构图,可以发现会有几个系统都需要依赖dao,如果没有抽出来,这必会冗余,冗余的代码意味着不好维护。

规范

之前看不懂的阿里巴巴开发手册,现在能看懂了。我建议有空的时候还是可以看看的,都说得挺有道理的。

阿里大佬们踩了一堆坑,然后总结出来的规范。

【强制】二方库的新增或升级,保持除功能点之外的其它 jar 包仲裁结果不变。如果有改变,

必须明确评估和验证,建议进行 dependency:resolve 前后信息比对,如果仲裁结果完全不一

致,那么通过 dependency:tree 命令,找出差异点,进行<excludes>排除 jar 包。

【参考】为避免应用二方库的依赖冲突问题,二方库发布者应当遵循以下原则:

1)精简可控原则。移除一切不必要的 API 和依赖,只包含 Service API、必要的领域模型对

象、Utils 类、常量、枚举等。如果依赖其它二方库,尽量是 provided 引入,让二方库使用

者去依赖具体版本号;无 log 具体实现,只依赖日志框架。

2)稳定可追溯原则。每个版本的变化应该被记录,二方库由谁维护,源码在哪里,都需要能

方便查到。除非用户主动升级版本,否则公共二方库的行为不应该发生变化。

…

三歪瞎扯

为什么我们会用多模块(Module)?其实就是让我们的项目代码变得更加清晰,像对外服务的api层就必须要抽出一个精简的Module给别人使用。

不知道你们如果能看完这篇文章能不能有所启发,反正我已经写完了。如果你们感兴趣的话,等我整合完这些系统我再来写一篇关于这段时间的感受。

我是三歪,一个要成为光头强的男人,下期见。给三歪点个赞,对三歪真的非常重要!**

Java代码审计实战:XXE漏洞原理、挖掘与安全加固指南 XML外部实体注入(XXE)是一种常见的安全漏洞,其原理源于XML解析器默认支持外部实体引用,攻击者可借此读取服务器文件、发起内网请求或导致拒绝服务。在Java开发中,XML广泛应用于数据交换,但许多解析器如DocumentBuilder、SAXParser、DOM4J的SAXReader等默认启用外部实体解析,存在高风险。理解XXE的技术价值在于防范数据泄露与系统入侵,尤其在金融、政务等传统行业系统及微服务API场景中至关重要。本文基于Java代码审计实践,系统剖析XXE漏洞的挖掘路径,涵盖从特征搜索、数 阅读详情

相关推荐

PCB布线避坑指南:晶振布局的5个致命错误(附正确示例图)

本文深入解析PCB布线中晶振布局的5个致命错误,包括底层布线、电容布局、地平面处理等关键问题,并提供实战解决方案。通过真实案例和量化数据,帮助硬件开发者避免常见陷阱,提升电路稳定性和性能。特别针对晶振这一高敏感元件,给出布线参数黄金法则和三维避让原则。

weixin_29215391的博客 428

二方包是什么

三方包(也称三方库): 公司之外的开源库, 比如apache、ibm、google等发布的依赖。二方包(也称二方库): 公司内部的依赖库,一般指公司内部的其他项目发布的jar包。一方包(也称一方库): 本工程中的各模块的相互依赖。

自救 唯有自强 2298

python特征选择pso_【来点干货】机器学习中常用的特征选择方法及非常详细的Python实例...

花费了很长时间整理编辑,转载请联系作者授权,违者必究。特征选择(Feature selection)是在构建预测模型的过程中减少输入变量的一个过程。它是机器学习中非常重要的一步并在很大程度上可以提高模型预测精度。这里我总结了一些机器学习中常见的比较有用的特征选择方法并附上相关python实现code。希望可以给大家一些启发。首先,我们为什么要进行特征选择呢?它有以下几个优点:减少过拟合:冗余数据常...

weixin_39927158的博客 1162

Java中 一方包,二方包和三方包区别

总结来说,主要区别在于权限范围和使用范围:一方包限于项目内部,二方包限于公司内部,而三方包则是面向公众或行业开放的。

weixin_44131922的博客 1361

不用Root也能抓包?Android高版本HTTPS抓包的3种替代方案(含Charles技巧)

本文针对Android高版本HTTPS抓包难题,提供了三种无需Root权限的实战解决方案:利用VirtualXposed等虚拟沙盒环境、配置Postern等系统级代理工具,以及通过修改应用源码或网络安全配置。文章还详细解析了Charles抓包工具在非Root环境下的高级配置与排错技巧,帮助开发者在遵守安全规范的前提下,有效进行网络调试与监控。

http9protocoller的博客 647

RK3588 EVB开发板原理图讲解【六】

该原理图展示了eMMC Flash与主控芯片之间的连接关系,以及相关的电源、信号线路和去耦电容等。

weixin_48721556的博客 1172

一方包,二方包,三方包的区别

一方包(也称一方库): 本工程中的各模块的相互依赖 二方包(也称二方库): 公司内部的依赖库,一般指公司内部的其他项目发布的jar包 三方包(也称三方库): 公司之外的开源库, 比如apache、ibm、google等发布的依赖 ...

马优晨 4069

西门子S7-1200与汇川SV660P伺服速度模式实战:从接线到编程全流程

本文详细解析了西门子S7-1200 PLC与汇川SV660P伺服驱动器在速度模式下的集成实战。内容涵盖从硬件接线、伺服参数关键设置(如电子齿轮比)、博图软件组态到PLC编程的全流程,并提供了故障排查与性能优化指南,帮助工程师快速实现精准、稳定的运动控制。

weixin_29248313的博客 487

一方库、二方库、三方库是什么?有什么区别?

一个公司里面现有两个团队分别开发项目,团队A开发项目A,团队B开发项目B,形成的jar包为:A.jar和B.jar。对于项目A来说,A.jar就是一方库,B.jar就是二方库。而对于项目B来说,B.jar就是一方库,A.jar就是二方库。这两个项目都引入了阿里巴巴的druid数据库连接池依赖,对于这两个项目这个依赖就是三方库。公司之外其他组织的开源库, 来自第三方的依赖比如apache、google等发布的jar包。我第一次还是在看阿里的开发手册才知道这些名词,那它们彼此之间有什么区别,让我们来好好聊聊。

jjgwawsl的博客 2116

波束成形(Beamforming)详解

波束成形(Beamforming)是一种智能天线技术,通过调整天线阵列的相位和幅度,使信号在特定方向上增强,同时抑制干扰,提高通信性能。根据实现方式,可分为固定波束成形和自适应波束成形;按计算方式,则包括模拟、数字和混合波束成形。该技术在 5G/6G、毫米波通信、MIMO、车联网、卫星通信 等领域广泛应用。其关键技术包括 相控阵、预编码、波束扫描和波束跟踪。未来,结合 AI、超大规模 MIMO(XL-MIMO)和太赫兹通信,波束成形将在无线通信、智能交通、环境感知等领域发挥核心作用。

斯黄人民的博客 2384

微信公众号网页H5跳转小程序实战指南(开放标签wx-open-launch-weapp)微信H5跳转小程序、wx-open-launch-weapp、小程序跳转按钮、微信开放标签、H5打开小程序

跳转小程序(wx-open-launch-weapp)唤起App显示支付按钮等等……而我们这次要用的,就是跳转小程序的标签。场景是否支持服务号网页✅ 支持小程序静态网页托管✅ 支持订阅号❌ 不支持微信外部浏览器❌ 不支持这个“开放标签”功能其实很强大,除了跳转小程序,还有唤起APP、跳支付、调用客服等能力。但可惜资料零散,很多坑等着你亲自踩一遍。这篇文章我整理的流程基本涵盖了从“能不能跳”到“怎么跳”的完整路径,希望你能像我一样省下几个小时的踩坑时间。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1163

Java开发手册之二方库依赖

分享一套我整理的面试干货,这份文档结合了我多年的面试官经验,站在面试官的角度来告诉你,面试官提的那些问题他最想听到你给他的回答是什么,分享出来帮助那些对前途感到迷茫的朋友。

2401_84048671的博客 795

【Bug已解决】Claude Desktop Cowork 报错 Workspace unavailable 解决方案

方案适用场景推荐指数确认虚拟机镜像下载完整性排查的第一步,最基础的前提检查⭐⭐⭐⭐⭐确认虚拟机平台功能已启用Windows 系统功能层面的必要条件⭐⭐⭐⭐⭐重启 CoworkVMService快速尝试恢复服务正常状态⭐⭐⭐⭐完全重启客户端排除临时性状态错乱⭐⭐⭐⭐降级使用文件工具临时替代方案,不阻塞当前工作⭐⭐⭐报错的本质是Cowork 功能依赖的虚拟机管理服务,在 Windows 应用包隔离机制下未能正确定位虚拟机文件的实际存放路径。

博客 6231

Maven核心插件实战指南:从基础配置到高级应用

本文深入解析Maven核心插件的实战应用,涵盖maven-source-plugin、maven-assembly-plugin、maven-shade-plugin和maven-antrun-plugin。通过详细的配置模板和真实场景示例,指导开发者从基础配置到高级应用,解决源码打包、依赖冲突、定制化打包等常见问题,提升项目构建效率与协作体验。

xray4的博客 862

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

数字广告生态核心:ADX、DSP、SSP、DMP、ADN 概念解析与实战指南

程序化广告是现代数字营销的核心技术,它通过自动化系统实现广告资源的精准匹配与高效交易。其基本原理是构建一个实时竞价(RTB)市场,当用户访问媒体时,广告请求被瞬间广播,由需求方平台(DSP)基于数据管理平台(DMP)的人群画像进行智能出价,价高者得。这项技术的核心价值在于极大提升了广告投放的效率和精准度,使广告预算能直接触达目标用户。其应用场景广泛覆盖品牌展示、效果营销、用户拉新等。本文聚焦于剖析构成该生态的五大关键平台——ADX(广告交易平台)、DSP(需求方平台)、SSP(供应方平台)、DMP(数据管理

axfcjwkbi259888707的博客 574

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

2017QCon分享:从淘宝到云端的高可用架构演进

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33873846的博客 135

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

开发一个二方包,优雅地为系统接入ELK(elasticsearch+logstash+kibana)

生成一个logger对象交给spring容器管理。后面直接从容器取就可以了。

weixin_38225800的博客 1694

开发中经常听到的二方包,到底是什么?

二方包是企业内部开发的共享软件包,介于项目内部模块(一方包)和公共开源库(三方包)之间。它由公司其他团队开发,供多个项目复用,如基础工具包、业务SDK和中间件客户端。二方包具有统一技术栈、提高代码复用率、质量可控等优势,但也需注意版本冲突、循环依赖等问题。管理规范包括明确命名规则、版本策略和权限控制。最佳实践强调单一职责、最小依赖、充分测试和详细文档。良好的二方包体系能提升企业研发效能,是技术沉淀的重要体现。

kingwz2012的专栏 665

什么是一方库、二方库、三方库?

什么是一方库、二方库、三方库?

panying941206的博客 6834

【Java】什么是二方库?

一、什么是二方库 作为开发,最常听说的还是第三方库,二方库这个说法叫的不多。 目前对于第一二三方库的理解大致如下 一方库:本工程范围内,各个模块和包之间的相互依赖 二方库:引入的同一个公司内部的其他工程 三方库:公司以外的其他依赖 二方库的控制程度可以理解为好改又不好改,一个公司的项目,也好说话,但是可能是跨部门的,沟通起来万一跟外部一样费劲也是有可能的。 二、二方库相关限制规约 在阿里出品的《Java开发手册》中,工程结构一章中,有专门对于二方库依赖的规定。 三、总结 作为二方库的开发一方,要遵

Code Metaverse 6089

如何以低侵入方式获取业务系统使用的二方包版本号

获取业务系统使用的二方包版本号这个需求,在大多数业务开发场景中可能并不常见,但在开发基础组件或进行依赖管理时却非常重要。通过本文介绍的埋点上报方式,我们可以以较低的侵入性获取到业务方使用的二方包及其版本号。在实施过程中,需要注意以下几点:首先,上报操作一定要使用异步方式,避免对业务造成堵塞;其次,如果使用自定义 Maven 插件进行上报,要注意类加载器的问题,因为 Maven 插件的类加载器是自定义类加载器;

kingwinstar的博客 677

什么是一方库、二方库、三方库

      条目        别称       说明     一方库    一方包    本工程中的各模块的相互依赖,是本项目中的依赖     二方库    二方包    公司内部的依赖库,一般指公司内部的其他项目发布的jar包     三方库    三方包    公司之外其他组织的开源库, 来自第三方的依赖比如apache、google等发布的jar包,如logging、log4j等    ...

ZytheMoon的博客 5995

一方包、二方包、三方包是什么?

一方包(也称一方库)、二方包(也称二方库)、三方包(也称三方库)说明: 一方包:本工程中的各模块的相互依赖 二方包:公司内部的依赖库,一般指公司内部的其他项目发布的jar包 三方包:公司之外的开源库, 比如apache、ibm、google等发布的依赖 转载于:https://www.cnblogs.com/songshu120/p/6163884.html...

weixin_30312563的博客 603

软件开发中的一方、二方、三方

一方:(一方包,一方库),一般指的是本项目或者本工程中的类和方法、接口等。 二方:(二方包,二方库),一般指的是公司内部的依赖库,公司内部其他项目发布的jar包,如公司项目平台的核心依赖包。 三方:(三方包,三方库),一般指的是外部的开源库或开源项目贡献的jar, 比如apache、google、Ali等发布的依赖

用博客记录成长的点滴 1万+

每周一总结 总结(2)

1. 一方包、两方包、三方包 一方包(也称一方库)、二方包(也称二方库)、三方包(也称三方库)说明: 一方包:本工程中的各模块的相互依赖 二方包:公司内部的依赖库,一般指公司内部的其他项目发布的jar包 三方包:公司之外的开源库, 比如apache、ibm、google等发布的依赖 2. Function.identity() Java 8允许在接口中加入具体方法。接口中的具体方法有两...

Dan的专栏 465

代理模式简介(七)

一、定义    为其它对象提供一种代理,以控制对这对象的访问。二、类图三、代理三要素    1.Subject 抽象主题角色(共同接口)    可以是抽象类或者接口,是一个最普通的业务类型定义,无特殊要求。public interface Subject { //定义一个方法 public void request(); }    2.RealSubject 具体主题角色(真实对象...

阿飞的博客 1184
上一篇: 给女朋友讲解什么是Git
下一篇: 过来人告诉你,去工作前最好还是学学Git
Java3y
Java3y 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄9年 1万+粉丝 509原创
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值