なぜ必要なデコレータのデコレータデザインパターン?
-
07-07-2019 - |
質問
甘いという名前のクラス A
, とを利用したいデコレータデザインパターンです。正しい場合は私の間違ったものの、その仕事をする必要がありまをデコレータのクラスという ADecorator
, る参照を保持する A
インスタンス、その他全てのデコレータにまで拡大する追加可能です。
かわからないのはなぜて作成デコレータのクラスを使用 A
インスタンス?
解決
のデコレータのパターンを追加するために使用力体的には、実行時).通常のオブジェクトにおいてその能力を固定させて書きます。が重要な点は、高機能で高い開発生産性をオブジェクトが延長される透明、クライアントのオブジェクトでの実施と同一のインタフェースは、元のオブジェクトの代表団の責任に飾られたオブジェクトです。
のデコレータのパターン作品のシナリオの多いオプション機能オブジェクトがあります。なデコレータのパターンまで作成の異なるクラスオブジェクト-オプションを設定します。一例では、長文ありがとうございまし有の ヘッドデザインパターン ご予約になっています。このコーヒーショップの例ではその音のようにカスタマイズ
いての基本的なコーヒーを飲むという。
public double cost(){
return 3.45;
}
その後、お客様を付加できるクリームでコストダウン0.35だから、今、あなたは作成CoffeeCreamクラスのコスト方法:
public double cost(){
return 3.80;
}
その後、お客様がしたいモカを費の0.5かしたいモカクリームまたはふくしないクリーム。で作成する授業CoffeeMochaCreamとCoffeeMocha.そしてお客様をダブルクリームで作成するクラスCoffeeCreamCream。かまたはクラスの爆発させます。ください言い訳に悪い例で使用します。奥高尾にひっそりと建つ料亭。遅いので些細なものでは表現します。
代わりにを作成することができますの項目の抽象クラスと抽象的な原価法:
public abstract class Item{
public abstract double cost();
}
を作り出すこともできますし、コンクリートコーヒークラスを拡張項目:
public class Coffee extends Item{
public double cost(){
return 3.45;
}
}
そして自分の好きな名前を付けてCoffeeDecoratorを拡張すると同じインタフェース、を含む項目が異なる場合もあります。-
public abstract class CoffeeDecorator extends Item{
private Item item;
...
}
それを作成できますコンクリートデコレータのための各オプション:
public class Mocha extends CoffeeDecorator{
public double cost(){
return item.cost() + 0.5;
}
}
通知をどのようにデコレータにはこだわらないというオブジェクト型でラッピングだけしていますか?この()の項目オブジェクトだけで追加し、そのまでとする。
public class Cream extends CoffeeDecorator{
public double cost(){
return item.cost() + 0.35;
}
}
ることが可能となり、多数の形状をこの数クラス例えば
Item drink = new Cream(new Mocha(new Coffee))); //Mocha with cream
または
Item drink = new Cream(new Mocha(new Cream(new Coffee))));//Mocha with double cream
います。
他のヒント
説明できないんですのでその wikipedia ます。
余談ですが、いかにパターンのデザインパターンを予 驚異的な.あの概念を簡単にダイジェストは、必ずコントラスト比較の類似パターンのこの途方わかりやすい。
一部の言語(のようなルビーにはJavaScriptだけなのに次々と新機能が追加され、インスタンス.まるご質問を元にタグ付けされたJavaので、思う求めているのはなぜできないことにJava.その理由はJavaは静的入力.Aインスタンスでの方法でクラスを定義しまたは継承し.そのため、たい場合は実行時に、インスタンスの方法が定義では、この新しい方法が定められている必要がある別のクラスです。