Computer >> Máy Tính >  >> Lập trình >> C#

Mẫu thiết kế proxy là gì và cách triển khai nó trong C #?

Mẫu Proxy cung cấp một đối tượng thay thế hoặc trình giữ chỗ để kiểm soát quyền truy cập vào một đối tượng khác.

Đối tượng Proxy có thể được sử dụng theo cách tương tự như đối tượng chứa nó

Những người tham gia

Chủ đề xác định một giao diện chung cho RealSubject và Proxy để Proxy có thể được sử dụng ở bất kỳ đâu mà RealSubject được mong đợi.

RealSubject xác định đối tượng cụ thể mà Proxy đại diện.

Proxy duy trì một tham chiếu đến RealSubject và kiểm soát quyền truy cập vào nó. Nó phải triển khai cùng một giao diện với RealSubject để cả hai có thể được sử dụng thay thế cho nhau

Có thể. Nếu bạn đã từng có nhu cầu thay đổi hành vi của một đối tượng hiện có mà không thực sự thay đổi định nghĩa của đối tượng đó, thì mẫu Proxy có thể cho phép bạn làm điều đó. Hơn nữa, điều này rất hữu ích trong các tình huống thử nghiệm, nơi bạn có thể cần phải sao chép hành vi của một lớp mà không cần triển khai đầy đủ.

Ví dụ

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;
   }
}