JAVA版
//Beverage.java
public abstract class Beverage {
String description = "Unkown Beverage";
public String GetDescription(){
return description;
}
public abstract double Cost();
}
//CondimentDecorator.java
public abstract class CondimentDecorator extends Beverage {
public abstract String GetDescription();
}
//Espresso.java
public class Espresso extends Beverage {
public Espresso()
{
description = "Espresso";
}
public double Cost() {
return 1.99;
}
}
//HouseBlend .java
public class HouseBlend extends Beverage {
public double Cost() {
return .89;
}
public HouseBlend()
{
description = "House Blend Coffee";
}
}
//Mocha.java
public class Mocha extends CondimentDecorator {
Beverage beverage;
public Mocha(Beverage beverage)
{
this.beverage = beverage;
}
public String GetDescription() {
return beverage.GetDescription() + ", Mocha";
}
public double Cost() {
return .20 + beverage.Cost();
}
}
//main.java
public class Main {
/**
Beverage bv2 = new HouseBlend();
bv2 = new Mocha(bv2);
System.out.println(bv2.GetDescription() +" $"+bv2.Cost());
}
}
运行结果
Espresso $1.99
House Blend Coffee, Mocha $1.09
##############################
C#版
//Beverage.cs
public abstract class Beverage
{
public string description = "Unkown Beverage";
public string GetDescription()
{
return description;
}
public abstract double Cost();
}
//CondimentDecorator.cs
public abstract class CondimentDecorator:Beverage
{
public abstract new string GetDescription();
}
//Espresso.cs
public class Espresso : Beverage
{
public Espresso()
{
description = "Espresso";
}
public override double Cost()
{
return 1.99;
}
}
//HouseBlend.cs
public class HouseBlend : Beverage
{
public HouseBlend()
{
description = "House Blend Coffee";
}
public override double Cost()
{
return .89;
}
}
//Mocha.cs
public class Mocha : CondimentDecorator
{
Beverage beverage;
public Mocha(Beverage beverage)
{
this.beverage = beverage;
}
public override double Cost()
{
return .20 + beverage.Cost();
}
public override string GetDescription()
{
return beverage.GetDescription() + ", Mocha";
}
}
Program.cs
class Program
{
static void Main(string[] args)
{
Beverage bv = new Espresso();
Console.WriteLine(bv.GetDescription() + " $"+bv.Cost());
Beverage bv2 = new HouseBlend();
bv2 = new Mocha(bv2);
Console.WriteLine(bv2.GetDescription() + " $" + bv2.Cost());
Console.ReadKey();
}
}
运行结果:
Espresso $1.99
Unkown Beverage $1.09
public abstract new string GetDescription();
->
public abstract string GetDescription();