9

デコレータパターンを読んでいるときに、明確にする必要がある何かに出くわしました。デコレータパターンでは、特定のオブジェクトをラップし、一連の実行を使用して計算します。しかし、なぜそれらのオブジェクトのリストを取得して、それぞれを反復処理できないのでしょうか。つまり、チェーンがなくても、リストと各オブジェクトの単純な反復を使用することはできませんか?

ありがとう

4

3 に答える 3

7

Decorator のポイントを見逃していると思います。

Decorator は、動作を透過的に追加することを目的としています。古典的な例は、Java の InputStream です。バッファリング、gzip 機能などを入力ストリームにチェーンできます。ただし、その装飾された入力ストリームの「ユーザー」は、追加の動作が追加されていることを知る必要はありません。ユーザーは、その装飾されたストリームを通常のストリームとして使用するだけです。もちろん、各「動作」を個別のオブジェクトとして保持し、チェーンを別のリストとして保存し、それらを明示的かつ個別に呼び出すと機能します。ただし、デコレータで「透明性」が失われました。

于 2012-07-23T02:08:11.327 に答える
2

リストを使用する場合、リストを管理し、オブジェクトをトラバースして適用するためのオブジェクトが必要です。プラグ互換であるためには、マネージャオブジェクトはすべてのオブジェクトの(通常は抽象)基本クラスのサブクラスである必要があります。各オブジェクトに何がラップされているかを認識させるよりも柔軟性が低く、それだけです。

于 2012-07-23T01:01:35.770 に答える