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

devtools/2024/11/14 23:50:00/

前言

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

代码

//蛋糕类(抽象类)
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.ppmy.cn/devtools/134025.html

相关文章

Elasticsearch 8.16:适用于生产的混合对话搜索和创新的向量数据量化,其性能优于乘积量化 (PQ)

作者:来自 Elastic Ranjana Devaji, Dana Juratoni Elasticsearch 8.16 引入了 BBQ(Better Binary Quantization - 更好的二进制量化)—— 一种压缩向量化数据的创新方法,其性能优于传统方法,例如乘积量化 (Product Qu…

Openstack7--安装消息队列服务RabbitMQ

只需要在控制节点安装 安装RabbitMQ yum -y install rabbitmq-server 启动RabbitMQ并设置开机自启 systemctl start rabbitmq-server;systemctl enable rabbitmq-server 创建 rabbitmq 用户 并设置密码为 000000 rabbitmqctl add_user rabbitmq 000000 如果你不慎创错了…

开源vs闭源:你更看好哪一方?

开源vs闭源:你更看好哪一方? 引言 你有没有想过,在当今人工智能(AI)蓬勃发展的时代,开源大模型与闭源大模型之间的竞争竟然如此激烈?这仿佛就像是两位骑士在同一片战场上,争夺你我…

iOS 18.2 六大新功能外媒實測|ChatGPT進化版SIRI、自製Genmoji

iOS 18.2 測試版再次帶來備受矚目的功能,當中包括 Image Playground、Genmoji,以及很多果迷都期待已久的 Siri與ChatGPT 的整合。外媒實測這些新功能的實際效果和操作體驗,發現當中有不少令人滿意的地方。 1)Image Playground-圖像…

SpringBoot中使用Thymeleaf模板引擎

和使用freemarker差不多的方式 1、导入thymeleaf的启动器 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> 2、编写Controller类 3、编写模板页面 注…

linux 用C语言编写自己的myshell

学习完基本指令、开发环境、进程的概念和创建进程等内容&#xff0c;我们就可以写自己的shell了 文章目录 目录 文章目录 前言 一、myshell构思 二、前缀字符串的打印 三、获取命令行和分割命令 分割命令 四、调用指令 五、内建指令&#xff08;特殊指令&#xff09; …

Java:JVM

1.JVM内存区域的划分 一个Java写的程序跑起来,就得到了一个Java进程 JVM 上面运行的字节码指令; 进程:操作系统资源分配的基本单位; 内存区域的划分: 1.程序计数器 在内存空间里(比较小的空间),保存了下一个要执行的指令的内存地址(元数据区的地址); 这里的"下一条…

Spring Boot MySQL 分库分表

1.首先需要在 pom.xml 中配置相关依赖 <properties><java.version>17</java.version><shardingsphere.version>5.0.0</shardingsphere.version><sharding-jdbc-spring-boot-starter.version>4.1.1</sharding-jdbc-spring-boot-starter…