Java设计模式之计数代理模式

《他强由他强,清风拂山岗;他横由他横,明月照大江》之三 由于OSGi环境中对类的加载以及模块间的依赖关系有严格的控制,所以OSGi也自定义了类加载器的行为,实现类加载时可能不遵循传统的双亲委派模型。这样的设计将对象的创建与其使用的控制分离开来,工厂模式隐藏了对象创建的细节,而代理模式控制了对象的访问,并可以在对象方法的执行前后添加额外逻辑。构造函数中不仅包括开发者定义的初始化代码,还包括编译器可能提供或者插入在构造函数中的特殊代码,用来初始化方法区中的数据。设置对象头:JVM需要在对象头中设置一些数据,如对象是哪个类的实例、对象的哈希码、对象的GC代年龄等。 阅读详情
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> 计数代理模式在客户对象调用服务提供者对象上方法的前后执行诸如日志(logging)和计数(counting)一系列附加功能时很有用。计数代理模式建议把这些附加功能封装在一个单独的对象,这个对象就是指计数代理对象,而不是把这些附加的功能实现放到服务提供者的内部。良好的对象设计的一个特征就是对象要专注于提供特定的功能。换句话说,理想的对象不应该做各种不相干的事情。把诸如日志(logging)和计数(counting)等类似的功能封装为一个单独的对象,而让服务提供者对象仅提供它自己的特定功能。也就是说,只允许服务提供者对象执行定义良好、特定的任务。   计数代理被设计成可以被客户访问的与服务提供者具有相同接口的对象。客户对象不是直接访问服务提供者,而是调用计数代理对象上的方法,计数代理执行必要的纪录日志(logging)和计数(counting)功能后,再把方法调用传递给服务提供着对象。如图1 Figure1: Generic Class Association When the Counting Proxy Pattern Is Applied   下面的例子说明了如何在应用程序中利用计数代理。   例子:   让我们设计一个Order类,类层次如图2,OrderIF接口声明了getAllOrders读取数据库中所有订单的简单方法。 Figure2: Order Class Hierarchy public interface OrderIF { public Vector getAllOrders(); }   作为getAllOrders方法实现的一部分,Order类实用了FileUtil工具类从order.txt文件中读取订单项。 public class Order implements OrderIF {  public Vector getAllOrders() {   FileUtil fileUtil = new FileUtil();   Vector v = fileUtil.fileToVector("orders.txt");   return v;  } }   让我们假定在调用getAllOrders()时,需要把取数据文件所花费的时间和记录条数要记录的log日志文件中。   这个附加的功能可以设计一个单独的OrderProxy类来实现,它与真实对象Order一样实现OrderIF接口。这样保证了OrderProxy对象提供给客户与真实对象Order一样的接口。如图3 Figure3: Order Class Hierarchy with the Counting Proxy public class OrderProxy implements OrderIF {  private int counter = 0;  public Vector getAllOrders() {   Order order = new Order();   counter ;   long t1 = System.currentTimeMillis ();   Vector v = order.getAllOrders();   long t2 = System.currentTimeMillis();   long timeDiff = t2 ? t1;   String msg = "Iteration=" counter "::Time=" timeDiff "ms";   //log the message   FileUtil fileUtil = new FileUtil();   fileUtil.writeToFile("log.txt”,msg, true, true);   return v;  } }   客户对象MainApp就想调用真实对象Order一样调用OrderProxy对象上的getAllOrders()方法,OrderProxy对象传递这个调用给真实对象Order,计算读取所有订单所花费的时间并使用FileUtil帮助类将其纪录的log日志文件中。在这个过程中,OrderProxy扮演者计数代理的角色。 public class MainApp {  public static void main(String[] args) {   OrderIF order = new OrderProxy();   Vector v = order.getAllOrders();   v = order.getAllOrders();   v = order.getAllOrders();   v = order.getAllOrders();  } }
设计模式六大原则与类的六种关系 个人整理的比较全面的 设计模式六大原则与类的六种关系 立即下载

相关推荐

Android加密开发实战:Spongy Castle集成与国密算法应用指南

在移动应用开发中,数据加密是保障用户隐私和信息安全的基石。其原理基于密码学算法,通过对数据进行编码转换,确保即使数据被截获也无法被未授权方解读。这项技术的核心价值在于为敏感信息提供机密性、完整性和身份验证,广泛应用于用户登录、本地存储、网络通信等场景。对于Android开发者而言,系统自带的加密功能有时无法满足需求,特别是涉及国密算法或更丰富算法套件时。本文聚焦于Spongy Castle这一专为Android定制的加密库,它有效解决了与系统内置Bouncy Castle的兼容性问题,并提供了对SM4等国密

weixin_27722377的博客 309

代理模式(转)

计数代理模式在客户对象调用服务提供者对象上方法的前后执行诸如日志(logging)和计数(counting)一系列附加功能时很有用。计数代理模式建议把这些附加功能封装在一个单独的对象,这个对象就是指计数代理对象,而不是把这些附加的功能实现放到服务提供者的内部。良好的对象设计的一个特征就是对象要专注于提供特定的功能。换句话说,理想的对象不应该做各种不相干的事情。把诸如日志(logging)和计数(c...

iorit2003 158

混合开关电容DCDC变换器技术解析与工程应用指南

在电源设计领域,传统DCDC变换器在高降压比或高升压比场景下,往往面临占空比过窄、开关应力大、效率偏低等瓶颈。开关电容变换器虽能实现固定比例的电压变换,却受限于调节能力。混合开关电容DCDC变换器通过“开关电容网络粗调变比+电感式DCDC细调输出”的策略,兼顾高效率、高功率密度与宽调压范围。本文梳理了其典型拓扑(如2:1/4:1 SC+Buck)、关键对比、控制策略(含软充电)及工程应用中的常见问题,帮助电源工程师在服务器供电、快充、车载电源等场景下快速选型与调试。

weixin_29164185的博客 314

设计模式之代理设计模式

1.什么是代理模式 为其他对象提供一种代理以控制对这个对象的访问。 2.为什么使用代理模式 中介隔离:在某些情况下,一个客户类不想或者不能直接引用一个委托对象,而代理类对象可以在客户类和委托对象之间起到中介的作用,其特征是代理类和委托类实现相同的接口。 开闭原则,增加功能代理类除了是客户类和委托类的中介之外,我们还可以通过给代理类增加额外的功能来扩展...

qq_36617322的博客 313

PRIDE数据库20年:2025更新

PRoteomics IDEntifications (PRIDE)数据库(https://www.ebi.ac.uk/pride/)是全球领先的基于质谱(MS)的蛋白质组学数据存储库,也是ProteomeXchange联盟的创始成员之一。本文总结了过去3年中PRIDE资源及相关工具的发展情况。提交到PRIDE存档的数据集数量平均每月达到约534个。主要得益于基础设施的持续改进,如用于超大数据集的新文件传输协议(Globus)、新的数据重新提交流程以及自动数据集验证过程。

多组・学・多组学 2063

红火蚁巢穴AI智能识别,提供方案与思路!

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 1042

[转载]计数代理模式(Countingnbsp;Proxynbsp;Pattern)

计数代理模式(Countingnbsp;Proxynbsp;Pattern)第26章 计数代理模式(Counting Proxy Pattern)描述: 计数代理 模式在客户对象调用服务提供者对象上方法的前后执行诸如日志...

congji3817的博客 173

高通平台 Android T 蓝牙技术全解析:架构、代码与实现原理

协议栈、配置文件和服务都运行在一个独立的用户空间进程。

专业开发者的博客,一个从事Android WiFi和蓝牙的工程师 100

设计模式——代理模式

织入(Weaving):代理的生成时机,织入是把切面应用到目标对象并创建新的代理对象的过程,切面在指定的连接点被织入到目标对象中。这两种方式的代理目标都是被代理类中的方法,它的作用就是通过提供一个代理类,让我们在调用目标方法的时候,不再是直接对目标方法进行调用,而是通过代理类间接调用。解决问题的困难:要抽取的代码在方法内部,靠以前把子类中的重复代码抽取到父类的方式没法解决。所以需要引入新的技术。调用目标方法时先调用代理对象的方法,减少对目标方法的调用和打扰,同时让附加功能能够集中在一起也有利于统一维护。

一名在校大三学习JAVA 1479

rk3568 rk628桥片hdmi转lvds

RK628 是瑞芯微全新推出的视频桥接芯片,支持丰富的显示接口,支持高分辨率大屏产品转换需求。基于DRM、FB的显示框架易于使用。 输入信号支持:HDMI、RGB、BT.1120,输出信号支持 HDMI、GVI、Dual LVDS、Dual MIPI、MIPI-CSI、RGB、BT.1120,最高支持4K 60fps 输入/输出转换,并且支持输入到输出 1/4~4倍的缩放。

weixin_35723192的博客 1131

【蒸汽幻想台服新版商业端】2025最新整理单机一键即玩镜像端+WIN系半手工端+PC客户端+网页注册+网页管理后台+教程【站长亲测】

MMORPG端游【蒸汽幻想台服新版商业端】2025最新整理单机一键即玩镜像端+WIN系半手工端+PC客户端+网页注册+网页管理后台+教程。

百创科技 531

设计模式之代理模式

设计模式之代理模式 唠叨两句:放假是真的不想写博客,连搬代码的都不想。一点动力都没,电脑开了一早上,愣是没动过。不定时更新,设计模式 估计还有7,8篇,完了好像就不知道写啥了,感觉肚子里没啥货。哈哈哈我真是太水了 代理模式又分静态代理和动态代理两种形式,用于控制对对象的调用 目的:比如说:要访问的对象在远程的机器上。 在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操作需要安全控制, 或者需要进程外的访问),直接访问会给使用者或者系统结构带来很多麻烦,我们可以在访问此对象时加上一个对此

莫邪 135

Prompt Engineering 学习指南:从入门到精通的最佳路径与资源

随着大型语言模型(LLM)能力的飞速发展,Prompt Engineering(提示工程)已成为人与AI协作的核心技能。本报告旨在为不同水平的学习者提供一条清晰、高效的学习路径,整合了当前社区公认的最佳实践和顶级开源资源,帮助您系统地掌握 Prompt Engineering,释放 LLM 的全部潜力。保持好奇心,不断尝试,您将能驾驭语言模型这一强大的工具,创造出前所未有的价值。超越简单的“一问一答”,学习如何将 Prompt Engineering 与外部工具和数据结合,构建强大的 AI 应用。

shiter编写程序的艺术 699

设计模式之美48-代理模式:代理在RPC、缓存、监控等场景中的应用

前面几节,我们学习了设计模式中的创建型模式。创建型模式主要解决对象的创建问题,封装复杂的创建过程,解耦对象的创建代码和使用代码。其中,单例模式用来创建全局唯一的对象。工厂模式用来创建不同但是相关类型的对象(继承同一父类或者接口的一组子类),由给定的参数来决定创建哪种类型的对象。建造者模式是用来创建复杂对象,可以通过设置不同的可选参数,“定制化”地创建不同的对象。原型模式针对创建成本比较大的对象,利用对已有对象进行复制的方式进行创建,以达到节省创建时间的目的。

fegus的博客 480

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

《java设计模式》之代理模式

代理模式  代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提供特定的服务。  按照代理的创建时期,代理类可以分为两种。  静态代理:由

wingkoo1986的专栏 324

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Java代理

     代理模式,是GOF中的一种;此模式中主要有client(调用者),proxy(代理),delegate(原对象、委托对象);client不是对delegate发请求,而是对proxy发请求,proxy内部将责任委托给delegate。一般proxy将一些复杂的操作封装起来,使client可以透明地调用delegate的方法,而无须知道proxy内部的实现细节。         

星星的技术专栏 815

[原]代理模式-智能引用代理

[关键字]:java,design pattern,设计模式,《Java与模式》学习,Proxy Pattern,代理模式 [环境]:StarUML5.0 + JDK6 [作者]:Winty (wintys@gmail.com) http://wintys.blogjava.net [正文]: 智能引用代理:   SmartProxyTest.java(并不属于patte...

天堂露珠 的专栏 569

代理模式

代理模式(Proxy Pattern)是程序设计中的一种设计模式。 所谓的代理者是指一个类型可以作为其它东西的接口。代理者可以作任何东西的接口:网络连接、存储器中的大对象、文件或其它昂贵或无法复制的资源。 著名的代理模式例子为引用计数(英语,reference counting)指针对象。 当一个复杂对象的多份副本须存在时,代理模式可以结合享元模式以减少存储器用量。典型作法是创建

whm2300的专栏 557

项目中用到的设计模式

设计模式在项目中的应用

when_less_is_more的博客 1万+

3.7 代理模式(Proxy)

代理模式(Proxy Pattern)是一种结构型设计模式,它通过提供一个替代品或占位符来代表另一个对象来控制对这个对象的访问。代理模式创建具有现有对象相同接口的对象,以便可以在不改变客户端代码的情况下控制对原始对象的访问。

294

面试干活,,面试必备哦

垃圾回收机制 首先我们要知道知道被称为垃圾 垃圾:就是这个对象不再有其他的对象的引用,就说这个对象时无用的,此对象就称为垃圾,其占用的内存也要被销毁 判断是否为垃圾的算法 引用计数法 引用计数法就是给对象中添加一个引用计数器,每当有一个地方引用它,计数器就加 1;当引用失效,计数器就减 1;任何时候计数器为 0 的对象就是不可能再被使用的,可以当做垃圾收集。 可达性分析算法 从这些节点开始向下搜索,节点所走过的路径称为引用链,当一个对象到 GC Roots 没有任何引用链相连的话,则证明此对象是不可用的

Tender的博客 362

设计模式示例_代理设计模式示例

设计模式示例 本文是我们名为“ Java设计模式 ”的学院课程的一部分。 在本课程中,您将深入研究大量的设计模式,并了解如何在Java中实现和利用它们。 您将了解模式如此重要的原因,并了解何时以及如何应用模式中的每一个。 在这里查看 ! 目录 1.简介 2.什么是代理模式 3.远程代理 4.虚拟代理 5.保护代理 6.何时使用代理模式 7.其他代理 ...

最佳 Java 编程 345

最新Java设计模式之美

目录: ┣━━不定期加餐 (3讲) ┃┣━━加餐一丨用一篇文章带你了解专栏中用到的所有Java语法.html ┃┣━━加餐一丨用一篇文章带你了解专栏中用到的所有Java语法.m4a ┃┣━━加餐一丨用一篇文章带你了解专栏中用到的所有Java语法.pdf ┃┣━━加餐二丨设计模式、重构、编程规范等相关书籍推荐.html ┃┣━━加餐二丨设计模式、重构、编程规范...

qq_46238511的博客 1687

【设计模式】代理模式

代理模式是一种结构型设计模式,通过引入代理对象来控制对目标对象的访问。它包含三个核心角色:抽象主题(Subject)、代理(Proxy)和真实主题(RealSubject)。代理模式的主要应用场景包括:远程代理(访问远程对象)、虚拟代理(延迟加载大资源)、保护代理(权限控制)、智能引用代理(附加操作)和缓冲代理(共享结果)。典型应用包括图片懒加载、权限管理系统和收费查询系统等。代码实现上,代理类通常持有对真实对象的引用,并在调用前后执行额外操作。该模式在不修改原对象的情况下增强了功能,提高了系统灵活性和安全

weixin_44131922的博客 1288
上一篇: 教你用JAVA ID生成器去生成逻辑主键
下一篇: 使用GDB调试Linux软件
java169
博客等级 码龄18年 27粉丝 2568原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值