设计模式值 装饰器

// 比较容易增加 减少功能,相比多继承灵活

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);

}

猜你喜欢

转载自blog.csdn.net/softuse/article/details/81359125