Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

รูปแบบการออกแบบพร็อกซีคืออะไรและจะนำไปใช้อย่างไรใน C #


รูปแบบ Proxy ให้วัตถุตัวแทนหรือตัวแทนเพื่อควบคุมการเข้าถึงวัตถุอื่นที่แตกต่างกัน

สามารถใช้วัตถุพร็อกซีในลักษณะเดียวกับวัตถุที่มี

ผู้เข้าร่วม

Subject กำหนดอินเทอร์เฟซทั่วไปสำหรับ RealSubject และ Proxy เพื่อให้สามารถใช้ Proxy ได้ทุกที่ที่ RealSubject คาดไว้

RealSubject กำหนดวัตถุที่เป็นรูปธรรมซึ่ง Proxy เป็นตัวแทน

Proxy รักษาการอ้างอิงถึง RealSubject และควบคุมการเข้าถึง ต้องใช้อินเทอร์เฟซเดียวกันกับ RealSubject เพื่อให้ทั้งสองสามารถใช้สลับกันได้

อาจจะ. หากคุณเคยมีความจำเป็นต้องเปลี่ยนพฤติกรรมของวัตถุที่มีอยู่โดยไม่ได้เปลี่ยนคำจำกัดความของวัตถุนั้นจริง ๆ รูปแบบพร็อกซีจะช่วยให้คุณทำเช่นนั้นได้ นอกจากนี้ สิ่งนี้มีประโยชน์มากในสถานการณ์การทดสอบ ซึ่งคุณอาจต้องทำซ้ำพฤติกรรมของคลาสโดยไม่ต้องใช้งานอย่างเต็มที่

ตัวอย่าง

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