AOPを実現するためのエージェントモデル

AOPを実現するためのプロキシモデルを通じて、

パブリック クラスProxyAop
    {
        公共の 静的な 無効ショー()
        {
            ユーザのユーザ = 新しいユーザー()
            {
                名前 = ジャンプ
                パスワード = " 123123 "
            }。

            Console.WriteLineを(オリジナルの登録だけでドライなもの);
            IUserProcessor userProcessor = 新しいUserProcessor();
            userProcessor.RegUser(ユーザ)。

            Console.WriteLineを(実現AOP後、エージェントモデルを達成するために:);
            userProcessor = 新新 UserProcessorProxy(); // 装飾層の
            userProcessor.RegUser(ユーザー);
        }
    }

    パブリック クラスユーザー
    {
        パブリック 文字列名前{ 取得しますセット; }
         パブリック 文字列のパスワード{ 取得しますセット; }
    }

    パブリック インターフェイスIUserProcessor
    {
        RegUser(ユーザーユーザー);
    }

    ///  <まとめ> 
    /// 拡張機能[クラス]となるプロキシクラスする必要が
     ///  </要約> 
    パブリック クラスIUserProcessor:UserProcessor
    {
        公共 のボイドRegUser(ユーザーユーザー)
        {
            Console.WriteLineを(" 登録ユーザー:" + user.name)。
        }
    }

    ///  <まとめ> 
    /// [クラス]の機能を拡張プロキシクラス
     ///  </要約> 
    パブリック クラスUserProcessorProxy:IUserProcessor
    {
        ///  <要約> 
        /// インスタンス化されたクラスを直接指定する
         ///  </要約> 
        プライベート IUserProcessor _userProcessor = 新新UserProcessor();
         公共 無効RegUser(ユーザーユーザー)
        {
            Console.WriteLineを(事前登録された、今何かを行います);
            _userProcessor.RegUser(ユーザ)。
            Console.WriteLineを(正常に登録、送信する電子メールそれ);
        }
    }

機能を拡張するクラスのインスタンスを見たときに、プロキシモードとの違いは何AOP Decoratorパターンを通じて実現、同じではありません

これは、(属性別)プロキシモードです。

    ///  <まとめ> 
    /// [クラス]の機能を拡張プロキシクラス
     ///  </要約> 
    パブリック クラスUserProcessorProxy:IUserProcessor
    {
        ///  <要約> 
        /// 直接クラスを指定し、インスタンス化
         ///  </要約> 
        プライベート IUserProcessor _userProcessorは= 新しい新しいUserProcessorは(); //属性によって直接インスタンス化
         、公共 のボイドRegUser(ユーザーユーザー)
        {
            Console.WriteLineを(事前登録された、今何かを行います);
            _userProcessor.RegUser(ユーザ)。
            Console.WriteLineを(正常に登録、送信する電子メールそれ);
        }
    }

それは、(コンストラクタ経由)のパターンで飾られています。

    ///  <まとめ> 
    /// デコレータ拡張クラスのクラスである[]
     ///  </要約> 
    パブリック クラスUserProcessorDirecotr:IUserProcessor
    {
        プライベートIUserProcessor _userProcessor;
         公共UserProcessorDirecotr(IUserProcessor userProcessor)//コンストラクタによって、
        {
            この ._userProcessor = userProcessor。
        }
        公共 のボイドRegUser(ユーザーユーザー)
        {
            Console.WriteLineを(事前登録された、今何かを行います);
            _userProcessor.RegUser(ユーザ)。
            Console.WriteLineを(正常に登録、送信する電子メールそれ);
        }
    }

実現上の違いに加えて、別のシナリオの間の差です。

例えば、Decoratorパターン、あなたはAOP達成するために、複数のクラスの装飾を与えることができます。それは時間の一例であるので、しかし、エージェンシーモデルエージェンシーモデルのみ、指定されたクラスを達成することができ、我々はクラスを拡張することが確認されています。どちらも、AOP、だけでは同じシナリオを実現することができます。

 

おすすめ

転載: www.cnblogs.com/LJP-JumpAndFly/p/12165369.html
おすすめ