【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.mzph.cn/bicheng/60732.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【论文速读】| 注意力是实现基于大语言模型的代码漏洞定位的关键

基本信息 原文标题:Attention Is All You Need for LLM-based Code Vulnerability Localization 原文作者:Yue Li, Xiao Li, Hao Wu, Yue Zhang, Xiuzhen Cheng, Sheng Zhong, Fengyuan Xu 作者单位:National Key Laboratory for Novel So…

Windows C++ TCP/IP 两台电脑上互相传输字符串数据

在 Windows 上使用 C 实现两个进程通过 TCP/IP 协议传输字符串数据是一个非常常见的任务。我们可以利用 Windows Sockets API (winsock2) 来进行套接字编程。在下面的例子中,我们将演示如何通过 TCP/IP 协议传输字符串数据。这里将包括两个程序:一个是服…

请解释一下Python的lambda函数在应用开发中的应用场景

1、请解释一下Python的lambda函数在应用开发中的应用场景。 Python的lambda函数是一种简洁的匿名函数,通常用于在需要一个函数作为参数的地方。在应用开发中,lambda函数可以用于各种场景,例如: 过滤和映射操作:在处理…

python包管理工具pip和conda的使用对比

python包管理工具pip和conda的使用对比 总述1. pip使用2. conda注意虚拟环境之间的嵌套,这个会导致安装包后看不到包,实际是安装到了base环境里 未完待续 总述 pip相对于conda,对应包的依赖关系管理不强,坏处是容易造成包冲突,好…

Diff 算法的误判

起源&#xff1a; for循环的:key的值使用index绑定&#xff0c;当循环列表条目变化更新&#xff0c;导致虚拟 DOM Diff 算法认为原有项被替换&#xff0c;而不是更新。 // vue2写法 错误例子 <template><div><button click"addItem">添加项目<…

Python与其他语言比较·练习题 --- 《跟着小王学Python》

Python与其他语言比较练习题 — 《跟着小王学Python》 《跟着小王学Python》 是一套精心设计的Python学习教程&#xff0c;适合各个层次的学习者。本教程从基础语法入手&#xff0c;逐步深入到高级应用&#xff0c;以实例驱动的方式&#xff0c;帮助学习者逐步掌握Python的核心…

如何修改npm包

前言 开发中遇到一个问题&#xff0c;配置 Element Plus 自定义主题时&#xff0c;添加了 ElementPlusResolver({ importStyle: "sass" }) 后&#xff0c;控制台出现报错&#xff0c;这是因为 Dart Sass 2.0 不再支持使用 !global 来声明新变量&#xff0c;虽然当前…

[CKS] K8S RuntimeClass SetUp

最近准备花一周的时间准备CKS考试&#xff0c;在准备考试中发现有一个题目关于RuntimeClass创建和挂载的题目。 ​ 专栏其他文章: [CKS] Create/Read/Mount a Secret in K8S-CSDN博客[CKS] Audit Log Policy-CSDN博客 -[CKS] 利用falco进行容器日志捕捉和安全监控-CSDN博客[CKS…

如何顺利申请国际专线网络:完整指南

随着全球经济的日益融合和跨国企业数量的增加&#xff0c;国际专线网络作为高效、稳定、可靠的跨境数据传输工具&#xff0c;越来越成为企业发展不可或缺的基础设施。与传统互联网连接相比&#xff0c;国际专线网络不仅提供更高的带宽和更低的延迟&#xff0c;还能确保数据的安…

第三百二十五节 Java线程教程 - Java Fork/Join框架

Java线程教程 - Java Fork/Join框架 fork/join框架通过利用机器上的多个处理器或多个内核来解决问题。 该框架有助于解决涉及并行性的问题。 fork/join框架创建一个线程池来执行子任务。 当线程在子任务上等待完成时&#xff0c;框架使用该线程来执行其他线程的其他未决子任…

数据结构小项目

单链表或者双链表完成学生管理系统。 1、使用fscanf和fprintf实现登录注册界面&#xff0c;登录成功显示学生管理系统菜单界面。 2、学生信息结构体&#xff08;学号&#xff0c;姓名&#xff0c;年龄&#xff09; 3、界面功能包含&#xff1a;录入学生信息&#xff0c;输出学生…

Vue3集成搜索引擎智能提示API

需求&#xff1a; 如何在项目中实现像百度搜索框一样的智能提示效果&#xff0c;如下图所示&#xff1a; 相关知识&#xff1a; 下面是各厂商提供的免费API 厂商请求百度http://suggestion.baidu.com/su?wd中国&cbwindow.baidu.sug必应http://api.bing.com/qsonhs.as…

一文了解Android的核心系统服务

在 Android 系统中&#xff0c;核心系统服务&#xff08;Core System Services&#xff09;是应用和系统功能正常运行的基石。它们负责提供系统级的资源和操作支持&#xff0c;包含了从启动设备、管理进程到提供应用基础组件的方方面面。以下是 Android 中一些重要的核心系统服…

华为机试HJ42 学英语

首先看一下题 描述 Jessi初学英语&#xff0c;为了快速读出一串数字&#xff0c;编写程序将数字转换成英文&#xff1a; 具体规则如下: 1.在英语读法中三位数字看成一整体&#xff0c;后面再加一个计数单位。从最右边往左数&#xff0c;三位一单位&#xff0c;例如12,345 等 2.…

鸿蒙实战:页面跳转

文章目录 1. 实战概述2. 实现步骤2.1 创建项目2.2 准备图片素材2.3 编写首页代码2.4 创建第二个页面 3. 测试效果4. 实战总结 1. 实战概述 实战概述&#xff1a;本实战通过ArkUI框架&#xff0c;在鸿蒙系统上开发了一个简单的两页面应用。首页显示问候语和“下一页”按钮&…

国产系统给在线的Word文件创建表格

在实际项目的开发中会遇到这样的需求&#xff1a;要求在生成word文件的时候&#xff0c;在文件的指定位置动态生成表格并填充。 public Table createTable(int numRows,int numColumns,WdAutoFitBehavior autoFitBehavior)throws java.lang.Exception参数&#xff1a; numRows…

[数组二分查找] 0744. 寻找比目标字母大的最小字母

文章目录 1. 题目链接2. 题目大意3. 示例4. 解题思路5. 参考代码 1. 题目链接 744. 寻找比目标字母大的最小字母 - 力扣&#xff08;LeetCode&#xff09; 2. 题目大意 描述&#xff1a;给你一个字符数组 letters&#xff0c;该数组按非递减顺序排序&#xff0c;以及一个字符…

计算机代码python代做matlab编程c语言编写接单matlabqt开发java

处理一个涉及MATLAB编程、Python代码、深度机器学习、图像信号处理算法以及通信仿真的综合性项目&#xff0c;需要分步骤地进行规划和实施。以下是一个详细的指南&#xff0c;旨在帮助你开始并推进这类复杂任务。 1. 项目规划与需求分析 明确目标&#xff1a;确定项目的具体目…

「Mac玩转仓颉内测版12」PTA刷题篇3 - L1-003 个位数统计

本篇将继续讲解PTA平台上的题目 L1-003 个位数统计&#xff0c;通过对数字的处理与统计&#xff0c;掌握基础的字符串操作与数组计数功能&#xff0c;进一步提升Cangjie编程语言的实际应用能力。 关键词 PTA刷题数字统计数组操作字符串处理编程技巧 一、L1-003 个位数统计 题…

2023_Spark_实验十五:SparkSQL进阶操作

实验目标 通过实践掌握Spark SQL中复杂查询&#xff08;包括子查询、窗口函数、联接等&#xff09;的实现方式。了解如何通过合理的数据分区和缓存策略进行性能优化。实现一个基于Spark SQL的ETL数据处理流程&#xff0c;应用相关优化技巧。 实验背景 在本实验中&#xff0c…