C# Language
デコレータデザインパターンの実装
サーチ…
備考
デコレータを使用する利点:
- 実行時に異なる設定で新しい機能を追加することができます
- 継承の良い代替案
- クライアントは使用したい設定を選択できます
カフェテリアのシミュレーション
デコレータは構造設計パターンの1つです。これは、オブジェクトの動作を追加、削除、または変更するために使用されます。このドキュメントでは、Decorator DPを適切に使用する方法について説明します。
あなたに簡単な例でそれのアイデアを説明しましょう。今あなたが有名なコーヒー会社のスターバックスにいると想像してください。クリームと砂糖、クリームとトッピング、さらに多くの組み合わせで、あなたが望むコーヒーを注文することができます!しかし、すべての飲み物のベースはコーヒーダーク、苦い飲み物、あなたは変更することができます。コーヒーマシンをシミュレートするシンプルなプログラムを作ってみましょう。
まず、ベースドリンクを記述するクラスを作成し、抽象クラスを作成する必要があります。
public abstract class AbstractCoffee
{
protected AbstractCoffee k = null;
public AbstractCoffee(AbstractCoffee k)
{
this.k = k;
}
public abstract string ShowCoffee();
}
さあ、砂糖、ミルク、トッピングのようなエキストラを作ってみましょう。作成されたクラスは、 AbstractCoffee
実装する必要があります - 彼らはそれを飾ります:
public class Milk : AbstractCoffee
{
public Milk(AbstractCoffee c) : base(c) { }
public override string ShowCoffee()
{
if (k != null)
return k.ShowCoffee() + " with Milk";
else return "Milk";
}
}
public class Sugar : AbstractCoffee
{
public Sugar(AbstractCoffee c) : base(c) { }
public override string ShowCoffee()
{
if (k != null) return k.ShowCoffee() + " with Sugar";
else return "Sugar";
}
}
public class Topping : AbstractCoffee
{
public Topping(AbstractCoffee c) : base(c) { }
public override string ShowCoffee()
{
if (k != null) return k.ShowCoffee() + " with Topping";
else return "Topping";
}
}
今私たちはお気に入りのコーヒーを作ることができます:
public class Program
{
public static void Main(string[] args)
{
AbstractCoffee coffee = null; //we cant create instance of abstract class
coffee = new Topping(coffee); //passing null
coffee = new Sugar(coffee); //passing topping instance
coffee = new Milk(coffee); //passing sugar
Console.WriteLine("Coffee with " + coffee.ShowCoffee());
}
}
コードを実行すると、次の出力が生成されます。
ミルク入りシュガー入りトッピングコーヒー
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow