【C#设计模式(10)——装饰器模式(Decorator Pattern)】

前言

装饰器模式可以在运行时为对象添加额外的功,而无需修改原始对象的代码。这种方式比继承更加灵活。

代码

csharp 复制代码
//蛋糕类(抽象类)
public abstract class Cake
{
    public  abstract void Create();
}
//奶油蛋糕类
public class CreamCake : Cake
{
    public override void Create()
    {
        Console.WriteLine("制作奶油蛋糕...");
    }
}
//蛋糕装饰器类(抽象类)
public abstract class CakeDecorator : Cake
{
    protected Cake cake;
    protected CakeDecorator(Cake cake)
    {
        this.cake = cake;
    }
    public override void Create()
    {
        cake.Create();
    }
}
//草莓装饰器类
public class StrawberryDecorator : CakeDecorator
{
    public StrawberryDecorator(Cake cake) : base(cake){}
    public override void Create()
    {
        base.Create();
        AddDecorator();
    }
    public void AddDecorator()
    {
        Console.WriteLine("给蛋糕添加草莓..");
    }
}
//芒果装饰器类
public class MangoDecorator : CakeDecorator
{
    public MangoDecorator(Cake cake) : base(cake)
    {
    }

    public override void Create()
    {
        base.Create();
        AddDecorator();
    }
    public void AddDecorator()
    {
        Console.WriteLine("给蛋糕添加芒果..");
    }
}


 /*
  * 结构模型:Structural Pattern
  * 装饰器模式:Decorator Pattern
  */
 internal class Program
 {
     static void Main(string[] args)
     {
         //制作奶油蛋糕
         Cake creamCake = new CreamCake();
         //给奶油蛋糕 + 草莓=>草莓奶油蛋糕
         CakeDecorator strawberryDecorator = new StrawberryDecorator(creamCake);
         //给草莓奶油蛋糕 + 芒果 => 草莓奶油 芒果 蛋糕 
         CakeDecorator mangoDecorator = new MangoDecorator(strawberryDecorator);
         //制作完成
         mangoDecorator.Create();
         Console.ReadLine();
     }
 }

运行结果

相关推荐
一只旭宝16 小时前
【C++入门精讲22】常见设计模式
c++·设计模式
思麟呀1 天前
在C++基础上理解CSharp-5
开发语言·c++·c#
折哥的程序人生 · 物流技术专研1 天前
Java 23 种设计模式:从踩坑到精通 | 装饰器模式 —— 比继承更灵活的扩展方式,你用过吗?
java·装饰器模式·java面试·结构型模式·java设计模式·javaio·从踩坑到精通
许彰午1 天前
38_Java设计模式之装饰器模式
java·设计模式·装饰器模式
z落落1 天前
C#ToolStrip+StatusStrip 状态栏实时显示系统时间+NotifyIcon系统托盘
开发语言·c#
ctrl_v助手1 天前
VisionPro (R) QuickBuild相机的连接
服务器·笔记·数码相机·c#
北域码匠1 天前
奇偶归并排序:并行计算的排序利器
数据结构·算法·c#·排序算法
geovindu1 天前
python: Reactor Pattern
开发语言·python·设计模式·反应器模式
zhangfeng11331 天前
国家超算中心 昆山站 异构加速卡1 显存16GB详细配置, 海光 Z100SM HCU
linux·网络·深度学习·c#
z落落1 天前
C# WinForm TreeView 树形控件+ListView控件+菜单栏
开发语言·c#