( Design Patterns ) Structural Design Patterns 2 -- Proxy Pattern

Definition

Provide a surrogate or placeholder for another object to control access to it. This pattern can be used when we don't want to access the resource or subject directly.

Components

  • Subject: Provides an interface that both actual and proxy class will implement. In this way the proxy can easily be used as a substitute for real subject.
  • Proxy: This class will be used by the applications and will expose the methods exposed by the Subject.
  • RealSubject: Real object that contains the actual logic to retrieve the data/functionality, which represented by the proxy.
Proxy Pattern UML

Code

public interface ISubject
{
    double Add(double x, double y);
    double Sub(double x, double y);
    double Mul(double x, double y);
    double Div(double x, double y);
}

public class Math : ISubject
{
    public double Add(double x, double y) { return x + y; }
    public double Sub(double x, double y) { return x - y; }
    public double Mul(double x, double y) { return x * y; }
    public double Div(double x, double y) { return x / y; }
}

public class MathProxy : ISubject
{
    private Math _math;

    public MathProxy()
    {
        _math = new Math();
    }

    public double Add(double x, double y)
    {
        return _math.Add(x, y);
    }
    public double Sub(double x, double y)
    {
        return _math.Sub(x, y);
    }
    public double Mul(double x, double y)
    {
        return _math.Mul(x, y);
    }
    public double Div(double x, double y)
    {
        return _math.Div(x, y);
    }
}

public class ProxyPatternRunner : IPatterRunner
{
    public void RunPattern()
    {
        var proxy = new MathProxy();

        Console.WriteLine("4 + 2 = " + proxy.Add(4, 2));
        Console.WriteLine("4 - 2 = " + proxy.Sub(4, 2));
        Console.WriteLine("4 * 2 = " + proxy.Mul(4, 2));
        Console.WriteLine("4 / 2 = " + proxy.Div(4, 2));

        Console.ReadKey();
    }
}

Proxy Types

  • Remote proxies: Representing the object located remotely.

  • Virtual proxies: These proxies will provide some default behaviors if the real objects needs some time to perform these behaviors. Once the real object is done, these proxies push the actual data to the client.

  • Protection proxies: When an application does not have access to some resource then these proxies will talk to the objects.

Reference

Understanding and Implementing Proxy Pattern in C# - CodeProject

Design Patterns 2 of 3 - Structural Design Patterns - CodeProject

Head First Design Patterns - O'Reilly Media

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容