根据《Head Of Design Pattern》里面的Java代码改写的Decorator模式
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
public partial class Design_Pattern_Decorator : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Beverage beverage1 = new Espresso();
beverage1 = new Mocha(beverage1);
beverage1 = new Sugar(beverage1);
Response.Write(beverage1.cost());
Response.Write(beverage1.GetDescription());
}
}
public abstract class Beverage
{
protected string description = "Unknown Beverage";
public virtual string GetDescription()
{
return description;
}
public abstract double cost();
}
public class Espresso : Beverage
{
public Espresso()
{
this.description = "Espresso";
}
public override double cost()
{
return 1.99;
}
}
public class HouseBlend : Beverage
{
public HouseBlend()
{
this.description = "House Blend";
}
public override double cost()
{
return 0.89;
}
}
public abstract class CondimentDecorator : Beverage
{
public override abstract string GetDescription();
}
public class Mocha : CondimentDecorator
{
Beverage beverage;
public Mocha(Beverage beverage)
{
this.beverage = beverage;
}
public override string GetDescription()
{
this.description = beverage.GetDescription() + ", Mocha";
return this.description;
}
public override double cost()
{
return beverage.cost() + 0.2;
}
}
public class Sugar : CondimentDecorator
{
Beverage beverage;
public Sugar(Beverage beverage)
{
this.beverage = beverage;
}
public override string GetDescription()
{
return beverage.GetDescription() + ", Sugar";
}
public override double cost()
{
return beverage.cost() + 0.12;
}
}