C#编程模式之装饰模式

        创作背景:朋友们,我们继续C#编程模式的学习,本文我们将一起探讨装饰模式。装饰模式也是一种结构型设计模式,它允许你通过在运行时向对象添加额外的功能,从而动态的修改对象的行为。装饰模式本质上还是继承的一种替换方式,通过组合的形式来扩展对象的功能。

        使用场景:当我们不想使用继承来扩展功能的时候,或者我们希望在运行时动态地添加功能的时候,再或者我们想要通过组合的形式来使对象获取更大的灵活性的时候,都可以使用装饰模式。

        优劣分析:1、能灵活的扩展对象的功能,避免类似功能的类的增加;2、不易过多使用,否则程序将难以理解,而且每装饰一次,都会增加一个对象。

        程序实现:

        1、创建一个组件接口。

    /// <summary>/// 对象接口,其功能是动态的给对象添加新属性或者功能。/// </summary>public abstract class ComponentDec{public abstract string Operation();}

        2、实现具体的组件。

    /// <summary>/// 定义一个对象,可以给这个对象添加一些职责/// </summary>public class ConcreteComponentDec : ComponentDec{public override string Operation(){string strResult = string.Empty;strResult = "创建一个对象";return strResult;}}

        3、创建装饰器抽象类。

    /// <summary>/// 维持一个指向Component的指针,并定义一个与Component接口一致的接口/// </summary>public abstract class DecoratorDec : ComponentDec{protected ComponentDec componentDec;public void SetComponent(ComponentDec componentDec){this.componentDec = componentDec;}public override string Operation(){if (componentDec != null){return componentDec.Operation();}return string.Empty;}}

        4、具体的装饰器。

    /// <summary>/// 具体的装饰器A/// </summary>public class ConcreteDecoratorA : DecoratorDec{public override string Operation(){return AddedBehavior() + base.Operation();}private string AddedBehavior(){return "我是A,";}}/// <summary>/// 具体的装饰器B/// </summary>public class ConcreteDecoratorB : DecoratorDec{public override string Operation(){return AddedBehavior() + base.Operation();}private string AddedBehavior(){return "我是B,";}}

        5、客户端调用结果。

        各位朋友,以上就是小编关于装饰模式的理解。希望各路大神批评指正。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/5146.shtml

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

相关文章

机器学习-什么是 k-means?

1、什么是 k-means&#xff1f; k-means是一种无监督的分类学习算法。它的基本原理是以距离作为相似度的评价指标&#xff0c;用样本点到类别中心的误差平方和作为聚类好坏的评价指标&#xff0c;通过迭代的方法使总体分类的误差评分和函数达到最小的聚类方法。 2、 k-means聚…

设计模式 基本认识

文章目录 设计模式的作用设计模式三原则设计模式与类图设计模式的分类 设计模式的作用 设计模式是在软件设计过程中针对常见问题的解决方案的一种通用、可重用的解决方案。设计模式提供了一种经过验证的方法&#xff0c;可以帮助开发人员解决特定类型的问题&#xff0c;并在软…

【论文阅读】IPT:Pre-TrainedImageProcessingTransformer

Pre-TrainedImageProcessingTransformer 论文地址摘要1. 简介2.相关作品2.1。图像处理2.2。 Transformer 3. 图像处理3.1. IPT 架构3.2 在 ImageNet 上进行预训练 4. 实验4.1. 超分辨率4.2. Denoising 5. 结论与讨论 论文地址 1、论文地址 2、源码 摘要 随着现代硬件的计算能…

1394 笔记

RN节点工作模块&#xff0c;当接收到STOF包后开始计时&#xff0c;当达到节点的发送、接收、数据泵偏移时向应用层发送相应使能。并根据STOF判断CC的错误状态&#xff0c;只有以下条件全部满足时进入正常工作模式&#xff1a; 条件1&#xff0c;STOF消息的帧周期正确&#xff…

mybatis工程需要的pom.xml,以及@Data 、@BeforeEach、@AfterEach 的使用,简化mybatis

对 “mybatis - XxxMapper.java接口中方法的参数 和 返回值类型&#xff0c;怎样在 XxxMapper.xml 中配置的问题” 这篇文章做一下优化 这个pom.xml文件&#xff0c;就是上面说的这篇文章的父工程的pom.xml&#xff0c;即&#xff1a;下面这个pom.xml 是可以拿来就用的 <?…

7天入门Android开发之第1天——初识Android

一、Android系统 1.Linux内核层&#xff1a; 这是安卓系统的底层&#xff0c;它提供了基本的系统功能&#xff0c;如内存管理、进程管理、驱动程序模型等。安卓系统构建在Linux内核之上&#xff0c;借助于Linux的稳定性和安全性。 2.系统运行库层&#xff1a; 这一层包括了安卓…

Java高级面试问题及答案

Java高级面试问题及答案 1. 什么是Java中的多态性&#xff1f;如何实现多态性&#xff1f; 问题描述&#xff1a; 多态性是面向对象编程的重要概念之一&#xff0c;它允许不同类的对象对同一消息做出不同的响应。请简要说明Java中的多态性&#xff0c;并描述如何实现多态性。…

短剧小程序开发,为什么短剧市场越来越火爆?

大众眼帘&#xff0c;但是不可否认现在短剧的质量也处在一个不断上升的阶段&#xff0c;我们今天就来分析分析短剧市场兴起的原因吧&#xff5e; 一、大趋势大环境的影响下&#xff0c;很多新型行业诞生&#xff0c;多数行业都在精进变化和改革&#xff0c;淘汰旧思想&#xf…

MYSQL 8.0的Linux - Generic版本安装

1.本文适用范围 适用于MYSQL 8.0的Linux - Generic版本&#xff0c;原则上适用所有的操作系统。已测试的操作系统包括&#xff1a; Ubuntu 16.04Ubuntu 18.04Ubuntu 20.04Ubuntu 22.04Kylin Linux Advanced Server V10 ​ 注意&#xff1a;如果操作系统使用过包管理系统&…

深入理解Java消息中间件-使用Spring Framework进行消息驱动的开发

结合Spring Framework&#xff0c;特别是Spring for Apache Kafka项目&#xff0c;Java开发者可以更加便捷高效地实现Kafka的生产者和消费者应用。本文将详细介绍如何在Spring环境中开发Kafka应用&#xff0c;确保内容的准确性并避免技术误导。 环境准备 首先&#xff0c;确保您…

GITEE本地项目上传到远程

由于需要&#xff0c;我这边将本地的仓库上传至GITEE。之前在网上搜索了相关的文档&#xff0c;但是步骤很繁琐&#xff0c;我这边介绍一个非常简单的。 一、在GITEE新建仓库 跟着指引一步步新建。 二、打开本地仓库&#xff0c;删除.git文件 默认情况下不会有这个.git文件&a…

【全面认知YOLO系列】看见未来:目标检测技术在各行业应用的全景解读第二部分

【全面认知YOLO系列】看见未来&#xff1a;目标检测技术在各行业应用的全景解读第二部分 一、目标检测技术在环境保护上的应用1、野生动物监测&#xff1a;2、森林火灾早期检测&#xff1a;3、水体污染监测&#xff1a;4、空气质量监测&#xff1a;5、垃圾分类与回收&#xff1…

【干货】【常用电子元器件介绍】【常用传感器】--常用传感器的识别、检测、选用

声明:本人水平有限,博客可能存在部分错误的地方,请广大读者谅解并向本人反馈错误。   传感器就是可以将一些变化的参量(温度、速度、亮度、磁场等)转换为电信号的器件。 人类用眼、耳、鼻、舌、身等感觉器官捕获信息,而在自动控制电路中,是用传感器来进行 信息捕获的。传感…

STM32H745BIT6上的ARM Cortex-M7和Cortex-M4核心共享SRAM4中的数据的方法

目录 1.Cortex-M7 Core (主核心) 2.Cortex-M4 Core (从核心) 3.具体代码示例 &#xff08;1&#xff09;Cortex-M7 Core (主核心) &#xff08;2&#xff09;Cortex-M4 Core (从核心) &#xff08;3&#xff09;总结 4.额外的知识点&#xff1a;原子操作 &#xff08;1…

插入排序算法(Python版)

1、什么是插入排序算法 插入排序算法是一种简单直观的排序算法&#xff0c;它的基本思想是将一个元素逐个插入到已排序的序列中&#xff0c;从而构建出完整的有序序列。 插入排序算法的时间复杂度为O(n^2)&#xff0c;其中n为待排序序列的长度。虽然插入排序在大规模数据上可…

java坦克大战1.0——敌人坦克发射子弹+敌人消失+爆炸

目录 1.敌人坦克发射子弹 1.功能分析 2.代码&#xff1a; 1.EnemyTank类&#xff1a; 2.MyPanel类 2.敌人消失 1.功能分析&#xff1a; 2.代码 1.EnemyTank类&#xff1a; 2.MyPanel类 3.Shot类 3.爆炸效果 1.功能分析 2.代码 1.Bomb类 2.MyPanel类 最终代码&…

【保姆级讲解如何安装与配置Xcode】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

在kuboard中添加k8s集群

1.登录kuboard后&#xff0c;点击添加集群面板 系统会跳转到k8s集群添加页面&#xff0c;按照页面提示输入自身的集群信息即可&#xff0c;此处没有什么难点。 添加成功后&#xff0c;点击集群面板&#xff0c;然后点击集群概要信息&#xff0c;就可以查看集群节点信息。 集群节…

【QEMU系统分析之启动篇(二十)】

系列文章目录 第二十章 QEMU系统仿真设置完成后开放轮询的分析 文章目录 系列文章目录第二十章 QEMU系统仿真设置完成后开放轮询的分析 前言一、QEMU是什么&#xff1f;二、QEMU系统仿真的启动分析1.系统仿真的初始化代码2.主循环数据初始化3. resume_mux_open()get_chardevs_…

ssm092基于Tomcat技术的车库智能管理平台+jsp

车库智能管理平台设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本车库智能管理平台就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短…