什麼是代理設計模式以及如何使用 C# 來實施它?


代理模式為代理或佔位符物件提供代理或者佔位符物件以控制訪問其他不同的物件。

代理物件可以用作其包含的物件的方式

參與者

主題為 RealSubject 和代理定義了一個公共介面,以便代理可以在預期有 RealSubject 的任何地方使用。

RealSubject 定義了代理所表示的具體物件。

代理保持對 RealSubject 的引用,並控制對它的訪問。它必須實現與 RealSubject 相同的介面,以便兩者可以互換使用

有可能是。如果你曾經需要改變現有物件的 behvior,而無需實際更改該物件的定義,代理模式就可以讓你做到這一點。此外,這在測試場景中非常有用,在這些場景中,你可能需要複製類的行為,而不完全實現它。

示例

internal class Program {
   private static void Main(string[] args) {

      NewServerProxy proxy = new NewServerProxy();
      Console.WriteLine("What would you like to order? ");
      string order = Console.ReadLine();
      proxy.TakeOrder(order);

      Console.WriteLine("Sure thing! Here's your " + proxy.DeliverOrder() + ".");
      Console.WriteLine("How would you like to pay?");
      string payment = Console.ReadLine();
      proxy.Processpayment(payment);

      Console.ReadKey();
   }
}

public interface IServerP {
   void TakeOrder(string order);
   string DeliverOrder();
   void Processpayment(string payment);
}
public class ServerP : IServerP {
   private string Order;
   public string DeliverOrder() {
      return Order;
   }

   public void Processpayment(string payment){
      Console.WriteLine("Server Processes the payment " + payment);
   }
   public void TakeOrder(string order) {
      Console.WriteLine("Server takes order " + order);
      Order = order;
   }
}
public class NewServerProxy : IServerP {
   private string Order;
   ServerP _server = new ServerP();
   public string DeliverOrder() {
      return Order;
   }
   public void Processpayment(string payment) {
      _server.Processpayment(payment);
   }
   public void TakeOrder(string order) {
      Console.WriteLine("Server takes order " + order);
      Order = order;
   }
}

更新日期:2020 年 11 月 25 日

187 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始吧
廣告
© . All rights reserved.