C#でデザインパターン「Proxyパターン」

C# コンピュータ
C#

オブジェクトへのアクセスを制御し、必要に応じて追加の処理を提供する中間オブジェクトを用いるパターンとのこと。

現実のProxyサーバーはHTTPリクエストを中継し代わりにアクセスすることで、本来アクセスできないネットワークからのWebブラウジングを実現します。
ProxyパターンではそのProxyサーバーのような中継機能の構造を実装するパターンになります。

ウィキペディアの「Proxyパターン」のページ
Proxy パターン - Wikipedia

サンプルコード

/// <summary>
/// Poxyパターンのサンプルコード
/// </summary>
interface IWebServer
{
    void Download();
}
class WebSiteA : IWebServer
{
    public void Download()
    {
        Console.WriteLine("WebSiteA:ダウンロード");
    }
}
class WebSiteB : IWebServer
{
    public void Download()
    {
        Console.WriteLine("WebSiteB:ダウンロード");
    }
}
class ProxyServer : IWebServer
{
    int _counter = 0;
    IWebServer _webServer = new WebSiteA();
    public void Download()
    {
        if (_counter > 1)
        {
            if (_webServer is not WebSiteB)
            {
                _webServer = new WebSiteB();                
            }
        }
        _webServer.Download();
        _counter++;
    }
}
static class Program
{
    static public void Main()
    {
        var proxyServer = new ProxyServer();

        proxyServer.Download();
        // WebSiteA:ダウンロード
        proxyServer.Download();
        // WebSiteA:ダウンロード
        proxyServer.Download();
        // WebSiteB:ダウンロード
    }
}

サンプルとしてPorxyServerで機能を追加を表現ために、アクセス回数でアクセスするWebSiteを切り替えるコードにしてみました。
一般的なサンプルではProxyServerにアクセス権限機能やログを保存する機能を搭載するみたいです。

コメント