using System;
namespace Decorator
{
public abstract class Bill
{
public abstract void PrintBill();
}
//创建一个未经修饰的具体账单类
public class ConcreteBill : Bill
{
public override void PrintBill()
{
Console.WriteLine("未经装饰的具体类");
}
}
public abstract class BillDecorator : Bill
{
//组合,横向实现对类的扩展,而非纵向(继承)
protected Bill bill;
public BillDecorator(Bill _bill)
{
this.bill = _bill;
}
}
public class HeadDecorator : BillDecorator
{
public HeadDecorator(Bill _bill)
: base(_bill)
{
}
public override void PrintBill()
{
base.bill.PrintBill();
Console.WriteLine("装饰了HeadDecorator");
//注意装饰的顺序,当base.bill.PrintBill();在后面时是不一样的
}
}
public class FootDecorator : BillDecorator
{
public FootDecorator(Bill _bill)
: base(_bill)
{
}
public override void PrintBill()
{
base.bill.PrintBill();
Console.WriteLine("装饰了FootDecorator");
//注意装饰的顺序
}
}
}
namespace Decorator
{
class Program
{
static void Main(string[] args)
{
//Bill bill = new ConcreteBill();
//Bill footDecorator = new FootDecorator(bill);
//Bill headDecorator = new HeadDecorator(footDecorator);
Bill footDecorator = new FootDecorator(new HeadDecorator(new ConcreteBill()));
footDecorator.PrintBill();
}
}
}