3

デコレータデザインパターンは、クラスの機能を拡張するための非常に優れたソリューションです。たとえば、既存のクラスメソッドで前処理メソッドと後処理メソッドが必要な場合は、デコレータを作成し、基本クラスの既存のメソッドをオーバーライドして、それぞれ前処理メソッドと後処理メソッドを呼び出すことができます。

ここでの私の質問は、上記の要件がアプリケーションの設計中に発生することはめったにないということです。作成したすべてのメソッドを仮想としてマークして、デコレータでオーバーライドできるようにすることはできません。したがって、メソッドの非表示に頼る必要があります。

メソッドをオーバーライドしたい状況で可能な限り最良の方法で実行できるように、クラスを設計するためのより良い方法はありますか?

4

2 に答える 2

1

通常、クラスを飾るときは、継承ではなく、構成を介して行います。そうすれば、何もオーバーライドする必要はありません。

于 2009-03-26T14:13:11.483 に答える
1

アスペクト(AOP)の使用について考えたことはありますか?-コメントを書いた後に追加: log4postsharp プロジェクトを見て、メソッドの属性をどのように使用しているかを確認できます。Log4PostSharp

f.ex Reflector を使用して dll をコンパイルして開くと、事前アクションと事後アクションがランタイムに追加されていることがわかります。

-そのような動作は、xml-configs を使用して追加することもできます

于 2009-03-23T07:22:43.743 に答える