using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
abstract class Appearance
{
public int cost = 2;
public abstract int get_cost();
public abstract void Show();
}
class Coffee:Appearance
{
private string coffee_name;
public override int get_cost()
{
return 15;
}
public Coffee(string name)
{
this.coffee_name=name;
}
public override void Show()
{
Console.WriteLine("一杯{0}添加",coffee_name);
}
}
abstract class Finery:Appearance
{
protected Appearance component;
public void Decorate(Appearance component)
{
this.component=component;
}
public override int get_cost()
{
if(component!=null)
{
this.cost+=component.get_cost();
}
return this.cost;
}
public override void Show()
{
if(component!=null)
{
component.Show();
}
}
}
class OreoCookies:Finery
{
public override void Show()
{
base.Show();
Console.Write("OreoCookies ");
}
}
class Almond :Finery
{
public override void Show()
{
base.Show();
Console.Write("Almond ");
}
}
class Cashews :Finery
{
public override void Show()
{
base.Show();
Console.Write("Cashews ");
}
}
class pecan :Finery
{
public override void Show()
{
base.Show();
Console.Write("pecan ");
}
}
class raisin :Finery
{
public override void Show()
{
base.Show();
Console.Write("raisin ");
}
}
class ChocolateChip :Finery
{
public override void Show()
{
base.Show();
Console.Write("ChocolateChip ");
}
}
class Strawberry :Finery
{
public override void Show()
{
base.Show();
Console.Write("Strawberry ");
}
}
class Program
{
static void Main(string[] args)
{
Coffee coffee = new Coffee("拿铁咖啡");
Console.WriteLine("\n第一个订单");
Strawberry St = new Strawberry();
ChocolateChip Cho = new ChocolateChip();
raisin rai = new raisin();
raisin rai2 = new raisin();
St.Decorate(coffee);
Cho.Decorate(St);
rai.Decorate(Cho);
rai2.Decorate(rai);
rai2.Show();
Console.WriteLine(rai2.get_cost());
Console.Read();
}
}
}