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

ASP.NET
获取字符串数组的最后一段字符
asp.net遍历目录文件夹和子目录所有文件
ASP.NET 中文显示之两种解决方法
asp.net替换和恢复html特殊字符
asp.net简化接收参数值的函数
asp.net验证一个字符串是否符合指定的正则表达式
asp.net求3位不同数字的组合数
C#(.NET)数据访问连接、查询、插入等操作的封装类
在ASP.NET2.0中通过Gmail发送邮件的代码
asp.net下配置数据源时出现: 未将对象引用设置到对象的实例。
asp.net gridview强制换行
asp.net gridview多页时的批量删除
未处理的事件"PageIndexChanging" 之解决方案
gridview调整单元格宽度的方法
aspx如果引用cs中的变量的方法
asp.net导出EXCEL的功能代码
asp.net注册Javascript的方法
Asp.Net 文件操作基类
Asp.Net+XML操作基类(修改,删除,新增,创建)
asp.net 获取指定文件夹下所有子目录及文件(树形)

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-28   浏览: 149 ::
收藏到网摘: 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的封装是处于适配接口的目的。