2016-12-23 6 views
0

私はヘッドファーストデザインパターンでデコレータパターンを読んでおり、それに関連するインターネット上の例もいくつかあります。HeadFirst帳のデコレータパターンの例とコンテナのオブジェクトの格納の比較

私は、その妥当性を理解しているか疑いがあります。

本のコーヒークラスの例では、コーヒーの調味料がコーヒークラスを装飾(またはラップ)し、getCost()関数を呼び出すと、コーヒークラスのgetCost()関数が呼び出されます。

しかし、私は自分のコーヒークラスに調味料オブジェクトをベクトルに格納し、そのベクトルのすべての調味料のgetCost()メソッドを呼び出して総コストを計算することをお勧めします。

私はここで何が欠けていますか?このデザインには抜け穴がありますか?

ありがとうございました。

+0

ようこそスタックオーバーフロー。 [The Tour](http://stackoverflow.com/tour)を読み、[ヘルプセンター](http://stackoverflow.com/help/asking)の資料を参考にしてください。ここに聞いてください。 –

+1

これらの動物、コーヒー、シェイプは、通常、ほとんど意味がありません。私はスポーツ関連のソフトウェアの例にソフトウェア開発の本を愛するだろう。 – SergeyA

答えて

0

ここでの説明は、https://en.wikipedia.org/wiki/Decorator_patternというパターンの基本を把握するのに役立つことがわかりました。私はそれを読んでお勧めしますが、ここで私はそれがあなたの基本的な答えを与えることが集めたいくつかのものがあります:

  1. ありますが、すべてのオブジェクトの上にそれを必要とすることなく、自分のクラスツリーからオブジェクトに機能が必要な場合があり、かつ追加その機能を必要とする複数(ただしすべてではない)のサブクラスに追加すると、コードの重複が構成管理の頭痛になることがあります。
  2. あなたが使用しているクラスの構造を制御できない場合があり、あなたの質問に示唆したように、直接拡張することの贅沢はありません。
  3. オブジェクトに追加できる複数のオプションのビヘイビアがある場合は、オプションのすべての組み合わせに対してサブクラスを作成する必要があるため、サブクラスの継承を行うのがますます困難になります。
関連する問題