C#设计模式之代理模式(四)

15.7 代理模式效果与适用场景

       代理模式是常用的结构型设计模式之一,它为对象的间接访问提供了一个解决方案,可以对对象的访问进行控制。代理模式类型较多,其中远程代理、虚拟代理、保护代理等在软件开发中应用非常广泛。

 

15.7.1 模式优点

       代理模式的共同优点如下:

       (1) 能够协调调用者和被调用者,在一定程度上降低了系统的耦合度。

       (2) 客户端可以针对抽象主题角色进行编程,增加和更换代理类无须修改源代码,符合开闭原则,系统具有较好的灵活性和可扩展性。

       此外,不同类型的代理模式也具有独特的优点,例如:

       (1) 远程代理为位于两个不同地址空间对象的访问提供了一种实现机制,可以将一些消耗资源较多的对象和操作移至性能更好的计算机上,提高系统的整体运行效率。

       (2) 虚拟代理通过一个消耗资源较少的对象来代表一个消耗资源较多的对象,可以在一定程度上节省系统的运行开销。

       (3) 缓冲代理为某一个操作的结果提供临时的缓存存储空间,以便在后续使用中能够共享这些结果,优化系统性能,缩短执行时间。

       (4) 保护代理可以控制对一个对象的访问权限,为不同用户提供不同级别的使用权限。

 

15.7.2 模式缺点

       代理模式的主要缺点如下:

       (1) 由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢,例如保护代理。

       (2) 实现代理模式需要额外的工作,而且有些代理模式的实现过程较为复杂,例如远程代理。

 

15.7.3 模式适用场景

       代理模式的类型较多,不同类型的代理模式有不同的优缺点,它们应用于不同的场合:

       (1) 当客户端对象需要访问远程主机中的对象时可以使用远程代理

       (2) 当需要用一个消耗资源较少的对象来代表一个消耗资源较多的对象,从而降低系统开销、缩短运行时间时可以使用虚拟代理,例如一个对象需要很长时间才能完成加载时。

       (3) 当需要为某一个被频繁访问的操作结果提供一个临时存储空间,以供多个客户端共享访问这些结果时可以使用缓冲代理。通过使用缓冲代理,系统无须在客户端每一次访问时都重新执行操作,只需直接从临时缓冲区获取操作结果即可。

       (4) 当需要控制对一个对象的访问,为不同用户提供不同级别的访问权限时可以使用保护代理

       (5) 当需要为一个对象的访问(引用)提供一些额外的操作时可以使用智能引用代理

 

习题

       1. Windows操作系统中的应用程序快捷方式是(    )模式的应用实例。

       A. 代理 (Proxy)            B. 组合 (Composite)

       C. 装饰 (Decorator)         D. 外观 (Facade)

       2. 毕业生通过职业介绍所找工作,请问该过程蕴含了哪种设计模式,绘制相应的类图。

       3. 在某应用软件中需要记录业务方法的调用日志,在不修改现有业务类的基础上为每一个类提供一个日志记录代理类,在代理类中输出日志,如在业务方法Method()调用之前输出“方法Method()被调用,调用时间为2012-11-5 10:10:10”,调用之后如果没有抛异常则输出“方法Method()调用成功”,否则输出“方法Method()调用失败”。在代理类中调用真实业务类的业务方法,使用代理模式设计该日志记录模块的结构,绘制类图并使用C#语言编程模拟实现。

       4. 某软件公司欲开发一款基于C/S的网络图片查看器,具体功能描述如下:用户只需在图片查看器中输入网页URL,程序将自动将该网页所有图片下载到本地,考虑到有些网页图片比较多,而且某些图片文件比较大,因此将先以图标的方式显示图片,不同类型的图片使用不同的图标,并且在图标下面标注该图片的文件名,用户单击图标后可查看真正的图片,界面效果如图15-7所示。试使用虚拟代理模式设计并实现该图片查看器。(注:可以结合多线程机制,使用一个线程显示小图标,同时启动另一个线程在后台加载原图。)

15-7 图片查看器界面效果图

【友情提示:建议大家有时间的话把这些练习都做一做,有问题欢迎讨论!】

【作者:刘伟(Sunny)  http://blog.csdn.net/lovelion

### STM32 ADC 输入阻抗特性及其影响 #### 输入阻抗的概念 输入阻抗是指当信号源连接到ADC输入端时,该电路呈现给信号源的电阻。较高的输入阻抗意味着较少电流被抽取自信号源,从而减少对原始信号的影响。 #### STM32 ADC 的输入结构 STM32系列微控制器中的ADC采用逐次逼近寄存器(SAR)型架构,在采样阶段通过内部电容器充电来获取电压样本。由于这个过程涉及到快速充放电操作,因此存在一定的等效输入阻抗[^1]。 #### 阻抗匹配的重要性 为了获得精确可靠的测量结果,应当使外部传感器或信号发生装置与ADC之间保持良好的阻抗匹配关系。如果两者之间的阻抗差异过大,则可能导致采集的数据失真严重甚至无法正常工作。 #### 影响因素分析 - **采样时间设置不当**: 对于高阻抗信号来说,过短的采样周期不足以让输入缓冲完全充满所需电量,进而引起误差增大;反之则可提高精度但会降低吞吐率。 - **噪声干扰敏感度增加**: 当前端设备内阻很高时,任何细微变化都容易传导至后续级联环节造成波动,使得最终输出变得不稳定[^2]。 ```cpp // 设置较长的采样时间以适应高阻抗信号源 void configureAdcSamplingTime(ADC_HandleTypeDef* hadc, uint32_t channel, uint32_t samplingTime){ ADC_ChannelConfTypeDef sConfig = {0}; sConfig.Channel = channel; sConfig.Rank = 1; // 排序优先级 sConfig.SamplingTime = samplingTime; HAL_ADC_ConfigChannel(hadc, &sConfig); } ```
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值