آشنایی با الگوی طراحی Decorator
نویسنده: وحید فرهمندیان
تاریخ: ۱۳۹۳/۱۲/۰۴ ۱۴:۵
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
public interface IBakery
{
string Bake();
double GetPrice();
}
public class Cake: IBakery
{
public string Bake() { return "Cake baked"; }
public double GetPrice() { return 2000; }
}
public class Bread: IBakery
{
public string Bake() { return "Bread baked"; }
public double GetPrice() { return 100; }
} public abstract class Decorator : IBakery
{
private readonly IBakery _bakery;
protected string bake = "N/A";
protected double price = -1;
protected Decorator(IBakery bakery) { _bakery= bakery; }
public virtual string Bake() { return _bakery.Bake() + "/" + bake; }
public double GetPrice() { return _bakery.GetPrice() + price; }
}
public class Type1 : Decorator
{
public Type1(IBakery bakery) : base(bakery) { bake= "Type 1"; price = 1; }
}
public class Type2 : Decorator
{
private const string bakeType = "special baked";
public Type2(IBakery bakery) : base(bakery) { name = "Type 2"; price = 2; }
public override string Bake() { return base.Bake() + bakeType ; }
} Cake cc1 = new Cake(); Console.WriteLine(cc1.Bake() + " ," + cc1.GetPrice()); Type1 cd1 = new Type1 (cc1); Console.WriteLine(cd1.Bake() + " ," + cd1.GetPrice()); Type2 cd2 = new Type2(cc1); Console.WriteLine(cd2.Bake() + " ," + cd2.GetPrice());
Cake c = new Cake(); c = new Type1(c); c = new SubType(c); //SubType derived from Cake (e.g. CakeComponent like Cream) //or: c = new Type1 (new SubType(c)); Console.WriteLine(c.Bake() + ", " + c.GetPrice());
// ساخت کیک معمولی با روکش کاکائویی Cake c = new CommonCake(); c = new Chocolate(c); // ساخت کیک معمولی با روکش میوهای Cake c = new CommonCake(); c = new Fruity(c); // ساخت کیک معمولی مخلوط با روکش کاکائویی و روکش میوهای به صورت همزمان Cake c = new CommonCake(); c = new Chocolate(c); c = new Fruity(c); // ساخت کیک مخصوص مخلوط با روکش کاکائویی و روکش میوهای به صورت همزمان Cake c = new SpecialCake(); c = new Chocolate(c); c = new Fruity(c);
// ساخت کیک مخصوص مخلوط با روکش کاکائویی و روکش میوهای به صورت همزمان Cake c = new SpecialCake(); Chocolate ch = new Chocolate(c); Fruity f = new Fruity(ch);
Cake cc1 = new Cake(); Type1 cd1 = new Type1 (cc1); Type2 cd2 = new Type2(cc1);
// ساخت کیک مخصوص مخلوط با روکش کاکائویی و روکش میوهای به صورت همزمان Cake c = new SpecialCake(); c = new Chocolate(c); c = new Fruity(c);