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