// 比较容易增加 减少功能,相比多继承灵活
1. 有一抽象类,有一抽象方法
2. 一个装饰类,实现这个抽象方法
3. 其他功能可以继承这个装饰类,可以在重写方法中可以增加其他功能
4. 通过构造函数可以实现多个功能的实现
public abstract class Apple
{
public abstract void Speak();
}
// 装饰器类,用于被继承添加功能
public class Decorator:Apple
{
public Decorator(Apple apple)
{
this.apple=apple;
}
private Apple apple;
public void Speak()
{
if(apple!=null)
{
base.Speak();
}
}
}
/// 抽象类的具体实现类,可以不做任何处理
public class Hongfushi:Apple
{
public override void Speak()
{
Console.WriteLine("这是牛顿发现的苹果");
}
}
public class BigApple:Decorator
{
public BigApple(Apple apple):base(apple)
{
}
public override void Speak()
{
base.Speak();
AddBigAppleSpeak();
}
public void AddBigAppleSpeak()
{
Console.WriteLine("this is a big red Apple");
}
}
public class GoodTasteApple:Decorator
{
public GoodTasteApple(Apple apple):base(apple)
{
}
public override void Speak()
{
base.Speak();
AddGoodTasteAppleSpeak();
}
public void AddGoodTasteAppleSpeak()
{
Console.WriteLine("this is a good taste Apple");
}
}
调用:
public static void Main()
{
Apple apple=new Hongfushi();
BigApple bigApple=new BigApple(apple);
GoodTasteApple goodApple=new GoodTasteApple(apple);
bigApple.Speak();
goodApple.Speak();
GoodTasteApple goodAndbigApple=new GoodTasteApple(bigApple);
}