5

以下のリンクでDecorator Patternを説明するUML図を理解しようとしています

http://www.dofactory.com/Patterns/PatternDecorator.aspx

Decorator と Component の間に「集約」関係がある理由がわかりません。

Decorator は基本コンポーネントなしでは存在できないため、それは合成であるべきだと思います。

4

2 に答える 2

7

コンポジションはアグリゲーションよりも強力です。通常、オブジェクトがそのコンポーネントの所有権を取得することを意味します。デコレータは装飾されたオブジェクトを所有していないため、この状況には当てはまりません。さらに、装飾されたオブジェクトも削除する必要なく、デコレータを削除できます。

実際には、集約と構成の境界線はあいまいな場合があり、特にダイアグラムをスケッチとして扱う場合は、どちらを選択してもあまり違いがないことがよくあります。

于 2009-11-20T22:48:11.857 に答える
2

基本的に、コンポーネントに複数のデコレータを設定できるためです。集約に関するウィキペディアから:

構成と集計の違い

構成の全体は、0..1 または 1 の多重度を持つ必要があります。これは、1 つの部分が 1 つの全体に対してのみ必要であることを示します。集合体全体は、任意の多重度を持つことができます。

また

コンポジションは、通常、コンテナー クラスのインスタンスと含まれるクラスのインスタンスとの間に強いライフ サイクル依存関係を持っています。コンテナーが破棄されると、通常、コンテナーに含まれるすべてのインスタンスも同様に破棄されます。

「通常」という言葉の使い方に注意してください。

これが当てはまる理由のより明確な例については、ウィキペディアのデコレータ図の例を見てください。

于 2009-11-20T22:38:48.450 に答える