设为首页收藏本站language 语言切换
查看: 2068|回复: 0
收起左侧

C#开发中代理模式Proxy设计过程详解

[复制链接]
发表于 2010-2-25 10:56:17 | 显示全部楼层 |阅读模式
<p >代理模式非常常用,大致的思想就是通过为对象加一个代理来降低对象的使用复杂度、或是提升对象使用的友好度、或是提高对象使用的效率。在现实生活中也有很多代理的角色,比如明星的经纪人,他就是一种代理,经纪人为明星处理很多对外的事情,目的是为了节省被代理对象也就是明星的时间。保险代理人帮助投保人办理保险,目的降低投保的复杂度。 <p >在开发中代理模式也因为目的不同效果各不相同。比如,如果我们的网站程序是通过.NET Remoting来访问帐号服务的。在编写代码的时候可能希望直接引用帐号服务的DLL,直接实例化帐号服务的类型以方便调试。那么,我们可以引入Proxy模式,做一个帐号服务的代理,网站只需要直接调用代理即可。在代理内部实现正式和测试环境的切换,以及封装调用.NET Remoting的工作。 <p ><p ><b>示例代码 </b><p ><p ><CENTER><ccid_nobr><table width="400" border="1" cellspacing="0" cellpadding="2"  bordercolorlight = "black" bordercolordark = "#FFFFFF" align="center"><tr><td bgcolor="e6e6e6" class="code" ><pre><ccid_code>using System; using System.Collections.Generic; using System.Text; namespace ProxyExample { class Program {   static void Main(string[] args)   {     AccountProxy ap = new AccountProxy();     ap.Register();   } } interface IAccount {   void Register(); } class Account : IAccount {   public void Register()   {     System.Threading.Thread.Sleep(1000);     Console.WriteLine(&quot;Done&quot;);   } } class AccountProxy : IAccount {   readonly bool isDebug = true;   IAccount account;   public AccountProxy()   {     if (isDebug)       account = new Account();     else       account = (IAccount)Activator.GetObject(typeof(IAccount), &quot;uri&quot;);   }   public void Register()   {     Console.WriteLine(&quotlease wait...&quot;);     account.Register();   } } }</ccid_code></pre></td></tr></table></ccid_nobr></CENTER><p ><p ><b>代码说明</b. <p >- IAccount就是抽象主题角色。代理对象和被代理对象都遵循这个接口,这样代理对象就能替换被代理对象。 <p >- AccountProxy就是代理主题角色。代理主题通常会存在一些逻辑或预处理或后处理操作,不会仅仅是对操作的转发。 <p >- Account就是真实主题角色。 <p ><b>何时采用</b><p >l代理模式应用非常广泛,如果你希望降低对象的使用复杂度、或是提升对象使用的友好度、或是提高对象使用的效率都可以考虑代理模式。 <p ><p ><b>实现要点 </b><p >- 代理对象和被代理对象都遵循一致的接口。 <p >- 在某些情况下,可以不必保持接口一致性,如果封装确实需要损失一些透明度,那么也可以认为是Proxy。 <p ><p >注意事项<p >roxy、Facade以及Adapter可能都是对对象的一层封装,侧重点不同。Proxy基于一致的接口进行封装,Facade针对封装子系统,转化为高层接口,而Adapter的封装是处于适配接口的目的。 <p >来源:赛迪网技术博客 - <u>程序人家</u><p ><p ><p align="right"></P><p align="center"></p></p>
您需要登录后才可以回帖 登录 | 论坛注册

本版积分规则

QQ|Archiver|手机版|小黑屋|sitemap|鸿鹄论坛 ( 京ICP备14027439号 )  

GMT+8, 2025-4-3 10:24 , Processed in 0.060806 second(s), 23 queries , Redis On.  

  Powered by Discuz!

  © 2001-2025 HH010.COM

快速回复 返回顶部 返回列表