รูปแบบ 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; } }