【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();
     }
 }

运行结果

相关推荐
热心市民☆6 小时前
C#基础语法
c#
rainmanqqst6 小时前
C#Netcore支持Https
网络协议·http·https·c#
__万波__10 小时前
二十三种设计模式(二)--工厂方法模式
java·设计模式·工厂方法模式
张人玉11 小时前
Prism 框架笔记及实例
c#·wpf·prism
·心猿意码·12 小时前
告别版本地狱:C# 中央包管理
c#
k***459912 小时前
C#数据库操作系列---SqlSugar完结篇
网络·数据库·c#
lzhdim12 小时前
C#开发的应用启动菜单应用(普通版) - 开源研究系列文章 - 个人小作品
开发语言·c#
前端老宋Running12 小时前
React 的“时光胶囊”:useRef 才是那个打破“闭包陷阱”的救世主
前端·react.js·设计模式
MM_MS12 小时前
C# 线程与并发编程完全指南:从基础到高级带详细注释版(一篇读懂)
开发语言·机器学习·计算机视觉·c#·简单工厂模式·visual studio
Tzarevich13 小时前
从字面量到原型链:JavaScript 面向对象的完整进化史
javascript·设计模式