当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > 无废话C#设计模式之九:Proxy

ASP.NET
使用函数传递参数来执行相应的数据库操作
如何实现在窗体和窗体之间进行传递数据
ASP.NET中文显示之两种解决方法
ASP.NET、JSP及PHP之间的抉择
ASP.NET 2.0发送电子邮件中存在的问题
谈谈HtmlControl与WebControl的区别与用途
从ASP.NET 1.1升级到ASP.NET 2.0要考虑的Cookie问题
通过系统配置来提高ASP.NET应用程序的稳定性
妙用ASP2.0中的URL映射改变网址
AJAX实现web页面中级联菜单的设计
ASP.NET跨页面传值技巧总结
再议ASP.NET DataGrid控件中的“添加新行”功能
Geometry 对象浅析
重构CollapsibleSplitter
如何利用.NET Framework使用RSS feed
ASP.NET获取IP与MAC地址的方法
在ASP.NET 2.0中使用样式、主题和皮肤
ASP.NET中为GridView添加删除提示框
ASP.NET 2.0,无刷新页面新境界
看看一个.net版对话框控件

ASP.NET 中的 无废话C#设计模式之九:Proxy


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-28   浏览: 54 ::
收藏到网摘: n/a

  本系列文章将向大家介绍一下C#的设计模式,此为第九篇文章,相信对大家会有所帮助的。废话不多说,继续来看。

  意图

  为其他对象提供一种代理以控制对这个对象的访问。

  场景

  代理模式非常常用,大致的思想就是通过为对象加一个代理来降低对象的使用复杂度、或是提升对象使用的友好度、或是提高对象使用的效率。在现实生活中也有很多代理的角色,比如明星的经纪人,他就是一种代理,经纪人为明星处理很多对外的事情,目的是为了节省被代理对象也就是明星的时间。保险代理人帮助投保人办理保险,目的降低投保的复杂度。

  在开发中代理模式也因为目的不同效果各不相同。比如,如果我们的网站程序是通过.NET Remoting来访问帐号服务的。在编写代码的时候可能希望直接引用帐号服务的DLL,直接实例化帐号服务的类型以方便调试。那么,我们可以引入Proxy模式,做一个帐号服务的代理,网站只需要直接调用代理即可。在代理内部实现正式和测试环境的切换,以及封装调用.NET Remoting的工作。

  示例代码

  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("Done");
  }
  }
  class AccountProxy : IAccount
  {
  readonly bool isDebug = true;
  IAccount account;
  public AccountProxy()
  {
  if (isDebug)
  account = new Account();
  else
  account = (IAccount)Activator.GetObject(typeof(IAccount), "uri");
  }
  public void Register()
  {
  Console.WriteLine("Please wait...");
  account.Register();
  }
  }
  }

  代码说明

  IAccount就是抽象主题角色。代理对象和被代理对象都遵循这个接口,这样代理对象就能替换被代理对象。

  AccountProxy就是代理主题角色。代理主题通常会存在一些逻辑或预处理或后处理操作,不会仅仅是对操作的转发。

  Account就是真实主题角色。

  何时采用

  代理模式应用非常广泛,如果你希望降低对象的使用复杂度、或是提升对象使用的友好度、或是提高对象使用的效率都可以考虑代理模式。

  实现要点

  代理对象和被代理对象都遵循一致的接口。

  在某些情况下,可以不必保持接口一致性,如果封装确实需要损失一些透明度,那么也可以认为是Proxy。

  注意事项

  Proxy、Facade以及Adapter可能都是对对象的一层封装,侧重点不同。Proxy基于一致的接口进行封装,Facade针对封装子系统,转化为高层接口,而Adapter的封装是处于适配接口的目的。