当前位置: 首页 > article >正文

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

前言

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

代码

//蛋糕类(抽象类)
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();
     }
 }

运行结果

在这里插入图片描述


http://www.kler.cn/a/394497.html

相关文章:

  • Android基于Path的addRoundRect,Canvas剪切clipPath简洁的圆角矩形实现,Kotlin(1)
  • 解读Makefile中,`=`、`:=`、`?=` 和 `+=`差异
  • 常见数据结构
  • ECharts关系图-关系图11,附视频讲解与代码下载
  • java后端传时间戳给前端的三种方式
  • FreeSWITCH实现多人电话会议功能
  • 3D意识(3D Awareness)浅析
  • 《InsCode AI IDE:编程新时代的引领者》
  • 【Java】【Spring框架】【复习】1
  • RFC 2018 即《TCP Selective Acknowledgement Options》
  • 两大新兴开发语言大比拼:Move PK Rust
  • 自动驾驶仿真:软件在环(SIL)测试详解(精简版入门)
  • 华为云租户网络-用的是隧道技术
  • PC端微信多开
  • 嵌入式硬件实战提升篇(一)-泰山派RK3566制作多功能小手机
  • Ps:OpenColorIO 设置
  • HTML5和CSS3的进阶_HTML5和CSS3的新增特性
  • 如何选择适合小团队的项目管理软件?8款软件推荐
  • Zookeeper的安装与使用
  • 【XML协议】轻松掌握使用C++ XML解析库——pugixml
  • 电脑技巧:推荐一款开源免费的多显示器管理工具Dual Monitor Tools
  • 【k8s】k8s集群中拉取需要登录的私有镜像库
  • Z分位数速查表
  • 4.1 Android NDK 简介
  • 开源项目低代码表单设计器FcDesigner扩展自定义的容器组件.例如col
  • 电动工具中的扭矩调节系统:原理与优化