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、だけでは同じシナリオを実現することができます。