C# デザインパターン - 構造パターンのプロキシパターン

序文        

        何らかの理由で、オブジェクトへのアクセスを制御するには、オブジェクトにプロキシを提供する必要があります。このとき、アクセスオブジェクトはターゲットオブジェクトを直接参照できない、または適切ではないため、プロキシオブジェクトがアクセスオブジェクトとターゲットオブジェクトの間の仲介役として機能します。プロキシ モードを学習するときは、Aop アスペクト プログラミングについて学ぶことができます。 AOP アスペクトプログラミング_aop プログラミング_バナナを愛するアハオのブログ - CSDN ブログ. Aop の基礎となる実装は、通常、プロキシ モードを使用します。

プロキシ モードは 3 つの役割に分かれています。

  1. 抽象ロール (サブジェクト) クラス: インターフェイスまたは抽象クラスを介して実際のロールとプロキシ オブジェクトによって実装されるビジネス メソッドを宣言します。
  2. Real Subject クラス: 抽象的な役割で特定のビジネスを実装し、プロキシ オブジェクトによって表現される実際のオブジェクトであり、最終的に参照されるオブジェクトです。
  3. プロキシ クラス: 実際のロールと同じインターフェイスを提供し、実際のロールへの参照を含み、実際のロールの機能にアクセス、制御、または拡張できます。

シナリオを想定してみましょう。コンピュータには計算方法があります。2 つの数値を渡して合計を計算します。しかし、今度は、渡された小数から小数部分を削除し、整数部分だけを計算する整数計算機を追加する必要があります。元々 sum メソッドを別の場所で使用する必要があるため、元のメソッドを変更することはできませんが、この機能を実装するためにプロキシ モードを使用します。

抽象的な文字

計算メソッドを内蔵した抽象文字コンピュータを作成する

public interface IComputer
{
    void calculator(double a, double b);
}

本当の性格

渡された 2 つの数値を加算するクラス sum を実装します。

public class sum : IComputer
{
    public void calculator(double a, double b)
    {
        Console.WriteLine(a + b);
    }
}

プロキシ クラス ProxySum

エージェントクラスでは実際の文字合計を直接参照しますが、その前にパラメータを10進化しています。

public class ProxySum : IComputer
{
    private sum sum = new sum();

    public void calculator(double a, double b)
    {
        a = Math.Floor(a);
        b = Math.Floor(b);
        sum.calculator(a, b);
    }
}

テスト

最初に元の実数文字の合計を使用し、小数点以下 2 桁を渡します。

    public static void Main(string[] args)
    {
        var sum = new sum();
        sum.calculator(1.111,3.999);
    }

結果5.11を取得しました

 

 次に、プロキシ クラス proxySum を使用します。

    public static void Main(string[] args)
    {
        var proxySum = new ProxySum();
        proxySum.calculator(1.111,3.999);
    }

 得られる結果は小数点以下を切り捨てて加算した結果です。

 要約する

アドバンテージ:

プロキシ モードは、クライアントとターゲット オブジェクトの間の仲介的な役割を果たし、ターゲット オブジェクトを保護します。

プロキシ オブジェクトはターゲット オブジェクトの機能を拡張でき、プロキシ モードはクライアントをターゲット オブジェクトから分離して、システムの結合をある程度まで減らすことができます。

短所: システムが複雑になります。

 

おすすめ

転載: blog.csdn.net/weixin_65243968/article/details/132225788