程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#設計模式之代理設計模式(Proxy)(4)

C#設計模式之代理設計模式(Proxy)(4)

編輯:關於C語言

七、不同類型的代理模式

遠程代理

可以將網絡的細節隱藏起來,使得客戶端不必考慮網絡的存在。客戶完全可以認為被代理的對象是局域的而不是遠程的,而代理對象承擔了大部分的網絡通信工作,遠程代理的結構圖如下圖所示。

虛擬代理

使用虛擬代理模式的優點就是代理對象可以在必要的時候才將被代理的對象加載。代理可以對加載的過程加以必要的優化。當一個模塊的加載十分耗費資源的時候,虛擬代理的優點就非常明顯。

保護代理

保護代理可以在運行時間對用戶的有關權限進行檢查,然後在核實後決定將調用傳遞給被代理的對象。

智能引用代理

在訪問一個對象時可以執行一些內務處理(Housekeeping)操作,比如計數操作等。

八、代理模式實際應用的例子

該例子演示了利用遠程代理模式提供對另外一個應用程序域(AppDomain)的對象進行訪問控制。

// Proxy pattern -- Real World example
using System;
using System.Runtime.Remoting;
// "Subject"
public interface IMath
{
 // Methods
 double Add( double x, double y );
 double Sub( double x, double y );
 double Mul( double x, double y );
 double Div( double x, double y );
}
// "RealSubject"
class Math : MarshalByRefObject, IMath
{
 // Methods
 public double Add( double x, double y ){ return x + y; }
 public double Sub( double x, double y ){ return x - y; }
 public double Mul( double x, double y ){ return x * y; }
 public double Div( double x, double y ){ return x / y; }
}
// Remote "Proxy Object"
class MathProxy : IMath
{
 // FIElds
 Math math;
 // Constructors
 public MathProxy()
 {
  // Create Math instance in a different AppDomain
  AppDomain ad = System.AppDomain.CreateDomain("MathDomain",null, null );
  ObjectHandle o = ad.CreateInstance("Proxy_RealWorld", "Math", false,
   System.Reflection.BindingFlags.CreateInstance, null, null, null,null,null );
  math = (Math) o.Unwrap();
 }
 // Methods
 public double Add( double x, double y )
 {
  return math.Add(x,y);
 }
 public double Sub( double x, double y )
 {
  return math.Sub(x,y);
 }
 public double Mul( double x, double y )
 {
  return math.Mul(x,y);
 }
 public double Div( double x, double y )
 {
  return math.Div(x,y);
 }
}
/**//// <summary>
///  ProxyApp test
/// </summary>
public class ProxyApp
{
 public static void Main( string[] args )
 {
  // Create math proxy
  MathProxy p = new MathProxy();
  // Do the math
  Console.WriteLine( "4 + 2 = {0}", p.Add( 4, 2 ) );
  Console.WriteLine( "4 - 2 = {0}", p.Sub( 4, 2 ) );
  Console.WriteLine( "4 * 2 = {0}", p.Mul( 4, 2 ) );
  Console.WriteLine( "4 / 2 = {0}", p.Div( 4, 2 ) );
 }
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved