什么是代理设计模式以及如何使用 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 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始吧
广告