デザインパターン------プロキシモード

オブジェクトへのアクセスを制御するために、他のオブジェクトのための薬剤を提供するために、プロキシモード。いわゆる剤には、実際のオブジェクトを表すことがあります。

いくつかのケースでは、オブジェクトは適切ではないかそこにオブジェクトへの直接参照され、オブジェクトがクライアントと対象物との間の仲介エージェントの役割を再生することができます。

サンプルについて。中国本土での網易ブリザード・エージェント、ブリザードなぜ中国の直接操作、網易によってエージェントとして行う必要がありますか?これは、米国のブリザードによるものです。それはゲーマーが米国のネットワークを介してゲームサーバーに接続することを可能にすると仮定すると、それは想像を絶するに恐ろしい事態だろう。

1.役割:

抽象テーマ別の役割(件名)

演技のテーマ別の役割(プロキシ) 

本当のテーマ別の役割(RealSubject)


回路図:


実際のオブジェクトとプロキシオブジェクトは、プロキシクラスにアクセスして、実際にアクセスしたいオブジェクトにアクセスするための同じインターフェイスを実装します。

2.長所と短所 

利点:

クライアント・プロキシ・オブジェクトとの間の仲介とターゲットオブジェクト、保護対象オブジェクトの役割を果たし、発信者は、発信者と調整することができある程度のシステムの結合を減少させます.. 強化されたスケーラビリティ、明確な役割と責任。

短所:

エージェントが追加されています。リクエストは処理速度が遅くなる原因となりますいくつかの代理店モデルはより複雑であることを認識しています。

3.アプリケーション:

(1)リモートエージェント:

オブジェクトの異なるアドレス空間があるという事実を隠すために、異なるアドレス空間内のローカル代表を提供することを目的とします。

(2)アラート:

オーバーヘッドを作成する必要に応じて、非常に長い時間を格納するを通じて非常に大きなオブジェクトは、実際のオブジェクトをインスタンス化する必要があります。これは、ときにのみ必要なオブジェクトが実際に作成されませんなります。

(3)セキュリティエージェント:
実際のオブジェクトのアクセス権限を制御するために使用します。異なるユーザーへの権限の異なるレベルを提供することができ。

(4)スマートガイドライン:

あなたは、いくつかの追加操作を提供するために、実際のオブジェクトを呼び出すとき。さんがそうで、このオブジェクトにレコードの番号に電話してみましょう。

4.示しています。

要件:好きな女の子の贈り物にプロキシ経由の求婚者。

回路図:


プロキシインタフェース:

 interface GiveGift  //送礼物接口
    {
        void GiveDolls();
        void GiveFlowers();
        void GiveChocolate();
    }

追求カテゴリ:

 class SchoolGirl
    {
        private string name;
        public string Name
        {
            get { return name; }
            set { name = value; }
        }
    }

求婚者カテゴリ:

 class Pursuit : GiveGift  //追求者实现“送礼物”接口
    {
        SchoolGirl mm;
        public Pursuit(SchoolGirl mm)
        {
            this.mm = mm;
        }
        public void GiveDolls()
        {
            Console.WriteLine(mm.Name + " 送你洋娃娃");
        }

        ......
    }
演技のカテゴリ:
class Proxy : GiveGift  //代理类实现“送礼物”接口
    {
        Pursuit gg;
        public Proxy(SchoolGirl mm)
        {
            gg = new Pursuit(mm);
        }


        public void GiveDolls()
        {
            gg.GiveDolls();  //在实现方法中调用追求者类的相关方法
        }

       ......
    }

クライアント:

 static void Main(string[] args)
        {
            SchoolGirl jiaojiao = new SchoolGirl();
            jiaojiao.Name = "李娇娇";

            Proxy daili = new Proxy(jiaojiao);

            daili.GiveDolls();
            daili.GiveFlowers();
            daili.GiveChocolate();

            Console.Read();
        }
レンダリング:



代理模式的本质就是迂回战术。通过加入一个中间层来解决这个问题。它是软件系统中非经常见的一个模式。代理一般实现的功能都是连接到server并进行数据下载和数据翻译以及本土化处理等操作,之后代理再将这些数据传送给本地的客户去使用。代理模式的应用使得client的压力大大降低,提升了客户的数目。


おすすめ

転載: www.cnblogs.com/ldxsuanfa/p/10943212.html