4

たとえば、ショッピング カートに追加できる Product クラスがあるとします。カートに入っているときに別の商品と一緒にパッケージして、15% の割引を追加できるようにしたい場合があります。

製品クラスは、取引を可能にする新しいサブクラスで装飾する必要がありますか、それともカートが値下げ「戦略」オブジェクトを製品に添付して価格を下げることができるように製品クラスを再設計する必要がありますか?

これは抽象的な例なので、必要に応じて使用してください。

4

2 に答える 2

3

デコレーターは、適用できる最も侵襲性の低いパターンの 1 つです。適用する場合、元のクラスは変更されないため、オープン/クローズドの原則に従います。私は可能な限りデコレーターを使用する傾向があります。これは主に、元のクラスが拡張機能と対話する必要がない場合に当てはまります。

ストラテジーを取得するクラスは、ストラテジーを受け入れるように変更する必要があるため、ストラテジーの注入はより侵襲的です (明らかに、この変更を行うと、クラスをさらに変更することなく、多くの異なるストラテジーを適用できます)。元のクラスが Strategy と対話する必要がある場合に Strategy を使用します (たとえば、何かについて尋ねる)。

戦略は装飾できることが多いことに注意してください...

于 2009-11-14T01:34:57.200 に答える
0

ドメインを見てください。

値下げが可能な商品であれば(うーん… ないと思いますが)、商品に追加する必要があります。それが注文(imo、割引を行うのに適した場所)であれば、そこにあるはずです.

于 2009-11-14T01:34:26.363 に答える