爆款云主机2核4G限时秒杀,88元/年起!
查看详情

活动

天翼云最新优惠活动,涵盖免费试用,产品折扣等,助您降本增效!
热门活动
  • 618智算钜惠季 爆款云主机2核4G限时秒杀,88元/年起!
  • 免费体验DeepSeek,上天翼云息壤 NEW 新老用户均可免费体验2500万Tokens,限时两周
  • 云上钜惠 HOT 爆款云主机全场特惠,更有万元锦鲤券等你来领!
  • 算力套餐 HOT 让算力触手可及
  • 天翼云脑AOne NEW 连接、保护、办公,All-in-One!
  • 中小企业应用上云专场 产品组合下单即享折上9折起,助力企业快速上云
  • 息壤高校钜惠活动 NEW 天翼云息壤杯高校AI大赛,数款产品享受线上订购超值特惠
  • 天翼云电脑专场 HOT 移动办公新选择,爆款4核8G畅享1年3.5折起,快来抢购!
  • 天翼云奖励推广计划 加入成为云推官,推荐新用户注册下单得现金奖励
免费活动
  • 免费试用中心 HOT 多款云产品免费试用,快来开启云上之旅
  • 天翼云用户体验官 NEW 您的洞察,重塑科技边界

智算服务

打造统一的产品能力,实现算网调度、训练推理、技术架构、资源管理一体化智算服务
智算云(DeepSeek专区)
科研助手
  • 算力商城
  • 应用商城
  • 开发机
  • 并行计算
算力互联调度平台
  • 应用市场
  • 算力市场
  • 算力调度推荐
一站式智算服务平台
  • 模型广场
  • 体验中心
  • 服务接入
智算一体机
  • 智算一体机
大模型
  • DeepSeek-R1-昇腾版(671B)
  • DeepSeek-R1-英伟达版(671B)
  • DeepSeek-V3-昇腾版(671B)
  • DeepSeek-R1-Distill-Llama-70B
  • DeepSeek-R1-Distill-Qwen-32B
  • Qwen2-72B-Instruct
  • StableDiffusion-V2.1
  • TeleChat-12B

应用商城

天翼云精选行业优秀合作伙伴及千余款商品,提供一站式云上应用服务
进入甄选商城进入云市场创新解决方案
办公协同
  • WPS云文档
  • 安全邮箱
  • EMM手机管家
  • 智能商业平台
财务管理
  • 工资条
  • 税务风控云
企业应用
  • 翼信息化运维服务
  • 翼视频云归档解决方案
工业能源
  • 智慧工厂_生产流程管理解决方案
  • 智慧工地
建站工具
  • SSL证书
  • 新域名服务
网络工具
  • 翼云加速
灾备迁移
  • 云管家2.0
  • 翼备份
资源管理
  • 全栈混合云敏捷版(软件)
  • 全栈混合云敏捷版(一体机)
行业应用
  • 翼电子教室
  • 翼智慧显示一体化解决方案

合作伙伴

天翼云携手合作伙伴,共创云上生态,合作共赢
天翼云生态合作中心
  • 天翼云生态合作中心
天翼云渠道合作伙伴
  • 天翼云代理渠道合作伙伴
天翼云服务合作伙伴
  • 天翼云集成商交付能力认证
天翼云应用合作伙伴
  • 天翼云云市场合作伙伴
  • 天翼云甄选商城合作伙伴
天翼云技术合作伙伴
  • 天翼云OpenAPI中心
  • 天翼云EasyCoding平台
天翼云培训认证
  • 天翼云学堂
  • 天翼云市场商学院
天翼云合作计划
  • 云汇计划
天翼云东升计划
  • 适配中心
  • 东升计划
  • 适配互认证

开发者

开发者相关功能入口汇聚
技术社区
  • 专栏文章
  • 互动问答
  • 技术视频
资源与工具
  • OpenAPI中心
开放能力
  • EasyCoding敏捷开发平台
培训与认证
  • 天翼云学堂
  • 天翼云认证
魔乐社区
  • 魔乐社区

支持与服务

为您提供全方位支持与服务,全流程技术保障,助您轻松上云,安全无忧
文档与工具
  • 文档中心
  • 新手上云
  • 自助服务
  • OpenAPI中心
定价
  • 价格计算器
  • 定价策略
基础服务
  • 售前咨询
  • 在线支持
  • 在线支持
  • 工单服务
  • 建议与反馈
  • 用户体验官
  • 服务保障
  • 客户公告
  • 会员中心
增值服务
  • 红心服务
  • 首保服务
  • 客户支持计划
  • 专家技术服务
  • 备案管家

了解天翼云

天翼云秉承央企使命,致力于成为数字经济主力军,投身科技强国伟大事业,为用户提供安全、普惠云服务
品牌介绍
  • 关于天翼云
  • 智算云
  • 天翼云4.0
  • 新闻资讯
  • 天翼云APP
基础设施
  • 全球基础设施
  • 信任中心
最佳实践
  • 精选案例
  • 超级探访
  • 云杂志
  • 分析师和白皮书
  • 天翼云·创新直播间
市场活动
  • 2025智能云生态大会
  • 2024智算云生态大会
  • 2023云生态大会
  • 2022云生态大会
  • 天翼云中国行
天翼云
  • 活动
  • 智算服务
  • 产品
  • 解决方案
  • 应用商城
  • 合作伙伴
  • 开发者
  • 支持与服务
  • 了解天翼云
      • 文档
      • 控制中心
      • 备案
      • 管理中心

      程序员必知!代理模式的实战应用与案例分析

      首页 知识中心 软件开发 文章详情页

      程序员必知!代理模式的实战应用与案例分析

      2024-04-19 06:40:32 阅读次数:47

      代理模式

      程序员必知!代理模式的实战应用与案例分析

      代理模式是在不改变原对象基础上,通过代理对象控制访问并添加额外操作,以销售代表和助理为例,助理作为代理对象,处理邮件、数据等琐碎工作,使销售代表能专注于与客户面对面交流推销,代理模式让原对象功能得以扩展,同时保持其对外接口的透明性。

      定义

      程序员必知!代理模式的实战应用与案例分析

      代理模式提供了一种在不改变原有对象的情况下,为另一个对象提供一种代理或占位符的方式,代理对象可以控制对原有对象的访问,并可以在访问过程中添加额外的操作,例如记录日志、进行权限验证等。

      举一个业务中形象的例子来说明代理模式,假设你是一家公司的销售代表,你负责与客户沟通并推销公司的产品,为了更好地与客户沟通,公司决定为你聘请一位助理,这位助理可以帮你处理一些繁琐的工作,比如回复客户的邮件、整理销售数据等,这样,你就可以专注于与客户进行面对面的交流和推销。在这个例子中,助理就是代理对象,它帮助你处理了一些琐碎的工作,让你能够专注于销售工作,同时,你仍然可以直接与客户进行沟通,并不会改变原有的销售代表角色。

      代码案例

      程序员必知!代理模式的实战应用与案例分析

      下面是一个反例,说明了未使用代理模式时的代码结构,其中客户端直接调用一个服务类的方法,没有任何代理在中间进行拦截或添加额外功能。

      首先,我们定义一个服务接口Service和它的实现类RealService,如下代码:

      // 服务接口  
      public interface Service {  
          void performAction();  
      }  
        
      // 真实的服务实现类  
      public class RealService implements Service {  
          @Override  
          public void performAction() {  
              System.out.println("RealService is performing an action.");  
          }  
      }
      

      接下来,我们写一个客户端类Client,它直接实例化RealService并调用其方法,如下代码:

      // 客户端类,直接调用RealService  
      public class Client {  
          public static void main(String[] args) {  
              // 客户端直接创建RealService的实例并调用其方法  
              Service service = new RealService();  
              service.performAction(); // 输出: RealService is performing an action.  
          }  
      }
      

      在这个例子中,没有使用代理模式,当客户端需要执行某个操作时,它直接创建RealService的实例并调用其performAction()方法,输出结果如下:

      RealService is performing an action.
      

      假设,现在我们想要在调用服务方法之前添加一些前置操作,比如日志记录或安全检查,由于我们没有使用代理模式,我们不得不在RealService类中添加这些逻辑,这可能会破坏类的单一职责原则,并且不易于维护和扩展,而如果我们使用了代理模式,就可以在不修改原有服务类的情况下,通过代理类来添加这些额外的功能。

      下面是一个使用代理模式的正例代码,我们引入一个代理类,该类实现与服务类相同的接口,并在其内部持有一个对服务类实例的引用,代理类可以在调用服务类的方法之前或之后执行额外的操作,如日志记录、权限检查等。

      首先,我们定义一个服务接口Service和它的实现类RealService,如下代码:

      // 服务接口  
      public interface Service {  
          void performAction();  
      }  
        
      // 真实的服务实现类  
      public class RealService implements Service {  
          @Override  
          public void performAction() {  
              System.out.println("RealService is performing an action.");  
          }  
      }
      

      然后,我们创建一个代理类ServiceProxy,它同样实现了Service接口,并持有一个RealService的引用,如下代码:

      // 代理类,实现了Service接口并持有RealService的引用  
      public class ServiceProxy implements Service {  
          private Service realService; // 持有真实服务类的引用  
        
          public ServiceProxy(Service realService) {  
              this.realService = realService;  
          }  
        
          @Override  
          public void performAction() {  
              System.out.println("Proxy: Preparing to perform action."); // 前置操作  
              realService.performAction(); // 调用真实服务类的方法  
              System.out.println("Proxy: Action has been performed."); // 后置操作  
          }  
      }
      

      最后,我们写一个客户端类Client,它使用代理类来间接调用真实的服务类,如下代码:

      // 客户端类,使用代理来调用服务  
      public class Client {  
          public static void main(String[] args) {  
              // 创建真实服务类的实例  
              Service realService = new RealService();  
              // 创建代理类的实例,并将真实服务类的实例传入  
              Service proxyService = new ServiceProxy(realService);  
              // 通过代理类调用方法  
              proxyService.performAction();  
              // 输出结果将包括代理类的前置和后置操作信息  
          }  
      }
      

      输出结果如下:

      Proxy: Preparing to perform action.  
      RealService is performing an action.  
      Proxy: Action has been performed.
      

      在这个例子中,客户端通过代理类ServiceProxy来调用服务,代理类在调用真实服务类的方法之前和之后执行了额外的操作,这种方式允许我们在不修改原有服务类的情况下增加新的功能或控制流程。

      本章节拓展知识点:

      在Spring中AOP的实现以及事务管理也都是基于代理模式实现的。Spring AOP允许开发者定义横切关注点,这些关注点可以在不修改原有代码的情况下,对程序进行增强,它通过使用代理对象,在目标方法执行前后或出现异常时,织入额外的逻辑,如日志记录、事务管理、安全控制等;Spring中的事务管理会为目标对象创建一个代理对象,这个代理对象会在目标方法执行时开启事务,并在方法执行完成后提交或回滚事务,通过这种方式,Spring实现了声明式事务管理,使得开发者可以专注于业务逻辑的开发,而无需关心事务的细节。

      核心总结

      程序员必知!代理模式的实战应用与案例分析

      代理模式是一种常用的设计模式,它通过引入代理对象来控制对目标对象的访问,增加额外的功能或控制,其优点主要在于:能够在不修改原有代码的基础上增强功能,实现对真实对象的保护和隐藏;提高系统的灵活性和可扩展性,降低耦合度。其缺点主要在于:会增加系统的复杂性和额外的开销,因为需要创建和维护代理类;同时,如果过度使用代理模式,可能会导致系统结构变得复杂和难以理解。

      本章节拓展知识点:

      代理模式通常会和装饰器模式搞混淆,这两种设计模式在结构上有一定的相似性,因为它们都涉及到一个对象包装另一个对象,并在调用被包装对象的方法时添加一些额外的逻辑。

      代理模式的主要目的是控制对另一个对象的访问,它可以添加一些前置或后置的处理逻辑,比如权限检查、日志记录等;;;而装饰器模式的主要目的是动态地给一个对象添加额外的职责或功能,它通过在调用原始对象的方法之前或之后执行一些操作来实现这一点。

      尽管两者有一些相似之处,但它们的目的和用法是不同的,代理模式更多地关注于控制访问,而装饰器模式则更多地关注于动态地添加功能。

      版权声明:本文内容来自第三方投稿或授权转载,原文地址:https://blog.51cto.com/bytegood/9160878,作者:程序员古德,版权归原作者所有。本网站转在其作品的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如因作品内容、版权等问题需要同本网站联系,请发邮件至ctyunbbs@chinatelecom.cn沟通。

      上一篇:Java命令行编译打包

      下一篇:史上最全的SpringBoot | JPA基本查询SQL

      相关文章

      2024-06-07 07:39:41

      代理模式介绍

      什么是代理模式 对一个对象提供一个代理对象,使用代理对象控制对原对象的引用。

      2024-06-07 07:39:41
      java , 代理模式
      2024-06-06 09:46:02

      Java设计模式之代理模式

      在某些情况下,我们希望通过一个中间代理来控制对某个对象的访问,这可能是因为原始对象的创建或访问涉及复杂的逻辑,或者我们想要在访问原始对象之前或之后执行一些操作代理模式提供了一个代理对象,它充当了原始的对象的替代品,以控制对原始对象的访问。

      2024-06-06 09:46:02
      Java , 代理模式
      2024-04-23 09:59:26

      设计模式之代理模式

      代理模式:为其他对象提供一种代理以控制对这个对象的访问,在某种情况下,一个对象不适合或者不能够直接引用另一个对象,而代理对象可以在客户类和目标对象之间起到中介的作用。

      2024-04-23 09:59:26
      代理模式 , 设计模式
      2023-06-29 08:14:00

      静态代理和动态代理的区别以及实现过程

      静态代理和动态代理的区别以及实现过程

      2023-06-29 08:14:00
      java , 代理模式 , 动态代理
      2023-05-04 09:35:47

      设计模式(Python语言)----代理模式

      更多信息请参考 【设计模

      2023-05-04 09:35:47
      python , 代理模式
      查看更多
      推荐标签

      作者介绍

      天翼云小翼
      天翼云用户

      文章

      33561

      阅读量

      5239002

      查看更多

      最新文章

      Java设计模式之代理模式

      2024-06-06 09:46:02

      设计模式(Python语言)----代理模式

      2023-05-04 09:35:47

      查看更多

      热门文章

      设计模式(Python语言)----代理模式

      2023-05-04 09:35:47

      Java设计模式之代理模式

      2024-06-06 09:46:02

      查看更多

      热门标签

      java Java python 编程开发 代码 开发语言 算法 线程 Python html 数组 C++ 元素 javascript c++
      查看更多

      相关产品

      弹性云主机

      随时自助获取、弹性伸缩的云服务器资源

      天翼云电脑(公众版)

      便捷、安全、高效的云电脑服务

      对象存储

      高品质、低成本的云上存储服务

      云硬盘

      为云上计算资源提供持久性块存储

      查看更多

      随机文章

      设计模式(Python语言)----代理模式

      Java设计模式之代理模式

      • 7*24小时售后
      • 无忧退款
      • 免费备案
      • 专家服务
      售前咨询热线
      400-810-9889转1
      关注天翼云
      • 旗舰店
      • 天翼云APP
      • 天翼云微信公众号
      服务与支持
      • 备案中心
      • 售前咨询
      • 智能客服
      • 自助服务
      • 工单管理
      • 客户公告
      • 涉诈举报
      账户管理
      • 管理中心
      • 订单管理
      • 余额管理
      • 发票管理
      • 充值汇款
      • 续费管理
      快速入口
      • 天翼云旗舰店
      • 文档中心
      • 最新活动
      • 免费试用
      • 信任中心
      • 天翼云学堂
      云网生态
      • 甄选商城
      • 渠道合作
      • 云市场合作
      了解天翼云
      • 关于天翼云
      • 天翼云APP
      • 服务案例
      • 新闻资讯
      • 联系我们
      热门产品
      • 云电脑
      • 弹性云主机
      • 云电脑政企版
      • 天翼云手机
      • 云数据库
      • 对象存储
      • 云硬盘
      • Web应用防火墙
      • 服务器安全卫士
      • CDN加速
      热门推荐
      • 云服务备份
      • 边缘安全加速平台
      • 全站加速
      • 安全加速
      • 云服务器
      • 云主机
      • 智能边缘云
      • 应用编排服务
      • 微服务引擎
      • 共享流量包
      更多推荐
      • web应用防火墙
      • 密钥管理
      • 等保咨询
      • 安全专区
      • 应用运维管理
      • 云日志服务
      • 文档数据库服务
      • 云搜索服务
      • 数据湖探索
      • 数据仓库服务
      友情链接
      • 中国电信集团
      • 189邮箱
      • 天翼企业云盘
      • 天翼云盘
      ©2025 天翼云科技有限公司版权所有 增值电信业务经营许可证A2.B1.B2-20090001
      公司地址:北京市东城区青龙胡同甲1号、3号2幢2层205-32室
      • 用户协议
      • 隐私政策
      • 个人信息保护
      • 法律声明
      备案 京公网安备11010802043424号 京ICP备 2021034386号