Proxy Design pattern falls under Structural Pattern of Gang of Four (GOF) Design Patterns in .Net. The proxy design pattern is used to provide a surrogate object, which references to other objects. In this article, I would like to share what is a proxy pattern and how is it work?
The proxy design pattern is used to provide a surrogate object, which references to other objects.
The proxy pattern involves a class, called proxy class, which represents the functionality of another class.
The UML class diagram for the implementation of the proxy design pattern is given below:
The classes, interfaces, and objects in the above UML class diagram are as follows:
This is an interface having members that will be implemented by RealSubject and Proxy class.
This is a class which we want to use more efficiently by using proxy class.
This is a class which holds the instance of RealSubject class and can access RealSubject class members as required.
public interface Subject { void PerformAction(); } public class RealSubject : Subject { public void PerformAction() { Console.WriteLine("RealSubject action performed."); } } public class Proxy : Subject { private RealSubject _realSubject; public void PerformAction() { if (_realSubject == null) _realSubject = new RealSubject(); _realSubject.PerformAction(); } }
The classes, interfaces, and objects in the above class diagram can be identified as follows:
IClient- Subject Interface.
RealClient - RealSubject Class.
ProxyClient - Proxy Class.
/// <summary> /// The 'Subject interface /// </summary> public interface IClient { string GetData(); } /// <summary> /// The 'RealSubject' class /// </summary> public class RealClient : IClient { string Data; public RealClient() { Console.WriteLine("Real Client: Initialized"); Data = "Dot Net Tricks"; } public string GetData() { return Data; } } /// <summary> /// The 'Proxy Object' class /// </summary> public class ProxyClient : IClient { RealClient client = new RealClient(); public ProxyClient() { Console.WriteLine("ProxyClient: Initialized"); } public string GetData() { return client.GetData(); } } /// <summary> /// Proxy Pattern Demo /// </summary> class Program { static void Main(string[] args) { ProxyClient proxy = new ProxyClient(); Console.WriteLine("Data from Proxy Client = {0}", proxy.GetData()); Console.ReadKey(); } }
There are various kinds of proxies, some of them are as follows:
Virtual proxies: Hand over the creation of an object to another object
Authentication proxies: Checks the access permissions for a request
Remote proxies: Encodes requests and send them across a network
Smart proxies: Change requests before sending them across a network
Objects need to be created on demand means when their operations are requested.
Access control for the original object is required.
Allow accessing a remote object by using a local object(it will refer to a remote object).