C#编程模式之装饰模式

news2024/11/25 0:55:27

        创作背景:朋友们,我们继续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.coloradmin.cn/o/1634718.html

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

相关文章

设计模式之监听器模式ListenerPattern(三)

一、介绍 监听器模式是一种软件设计模式&#xff0c;在对象的状态发生改变时&#xff0c;允许依赖它的其他对象获得通知。在Java中&#xff0c;可以使用接口和回调机制来实现监听器模式。 二、代码实例 1、事件Event类 package com.xu.demo.listener;// 事件类 public class…

QT-QTCreator环境配置

准备工作&#xff1a; 下载QT: 链接&#xff1a;https://pan.baidu.com/s/1prJcsC4DGqhKiXvLuPQFVA?pwd60b3 提取码&#xff1a;60b3下载WindowsKits&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1QNiS3HpbH5M5kXx5AhkqnQ?pwde2h8 提取码&#xff1a;e2h8安装的…

SpringBoot配置HTTPS及开发调试

前言 在实际开发过程中&#xff0c;如果后端需要启用https访问&#xff0c;通常项目启动后配置nginx代理再配置https&#xff0c;前端调用时高版本的chrome还会因为证书未信任导致调用失败&#xff0c;通过摸索整理一套开发调试下的https方案&#xff0c;特此分享 后端配置 …

影响外汇交易盈利的因素有哪些?

外汇交易就是通过汇率的差价来赚取相应的利润。在外汇交易中&#xff0c;投资者是否可以盈利&#xff0c;主要取决于是否正确的判断了市场趋势和行情。投资者在交易过程中受到主观和客观的因素影响&#xff0c;具体包含这些内容。 影响外汇交易盈利的因素有哪些&#xff1f; 1、…

5月软考中级软件设计师100条知识点速记!

最近有一些小伙伴问我&#xff1a;现在开始备考软考还来得及吗&#xff1f;其实只是备考中级的话时间还是比较充足的&#xff0c;5月底考试&#xff0c;每年都有不少人五一假期才开始备考并通过的&#xff0c;大家抓紧时间学起来吧&#xff01; 今天为大家分享“24上半年软考软…

GIT入门到实战

文章目录 版本控制常见的版本控制工具版本控制分类Git与SVN的主要区别 Git基本理论&#xff08;重要&#xff09;三个区域工作流程 GIT文件操作文件的四种状态查看文件状态忽略文件 GIT 常见问题 版本控制 版本控制&#xff08;Revision control&#xff09;是一种在开发的过程…

java连锁美业收银系统源码-美业SaaS系统【微信小程序端】功能及应用场景介绍

博弈美业管理系统源码 连锁多门店美业收银系统源码 多门店管理 / 会员管理 / 预约管理 / 排班管理 / 商品管理 / 促销活动 PC管理后台、手机APP、iPad APP、微信小程序 &#xff08; 需要系统演示视频可联系观看 &#xff09; ▶ 顾客微信小程序端&#xff1a; 场景名称 场…

prime1--vulnhub靶场通关教程

一. 信息收集 1. 探测目标主机IP地址 arp-scan -l //查看网段 vm 编辑--查看虚拟网络编辑器&#xff0c;看到靶机的网段 网段是&#xff1a; 192.168.83.0 是c段网络 2. 全面检测目标IP nmap -sP 192.168.83.1/24 靶机ip是&#xff1a; 192.168.83.145 攻击机的ip是&…

邦注科技 模具清洗机 干冰清洗机 干冰清洗设备原理介绍

干冰清洗机&#xff0c;这款神奇的清洁设备&#xff0c;以干冰颗粒——固态的二氧化碳&#xff0c;作为其独特的清洁介质。它的工作原理可谓独具匠心&#xff0c;利用高压空气将干冰颗粒推送至超音速的速度&#xff0c;犹如一颗颗银色的流星&#xff0c;疾速喷射至待清洗的物体…

【大模型系列】指令微调

概述 指令微调&#xff08;Instruction Tuning&#xff09;是指使用自然语言形式的数据对预训练后的大语言模型进行参数微调&#xff0c;22年谷歌ICLR论文中提出这个概念。在其它文献中&#xff0c;指令微调也被称为有监督微调&#xff08;Supervised Fine-tuning&#xff09;…

Python-VBA函数之旅-object基类(非函数)

目录 一、object基类的常见应用场景 二、object基类使用注意事项 三、如何用好object基类&#xff1f; 1、object基类&#xff1a; 1-1、Python&#xff1a; 1-2、VBA&#xff1a; 2、推荐阅读&#xff1a; 个人主页&#xff1a;神奇夜光杯-CSDN博客 一、object基类的…

YOLOV8 pycharm

1 下载pycharm 社区版 https://www.jetbrains.com/zh-cn/pycharm/download/?sectionwindows 2 安装 3 新建 4 选择 文件-> setting 配置环境变量 5 添加conda 环境

MyBatis-plus笔记——常用注解

TableName 在开发的过程中&#xff0c;我们经常遇到以上的问题&#xff0c;即实体类所对应的表有固定的前缀&#xff0c;例如 t_ 或 tbl_ 此时&#xff0c;可以使用 TableName 指定表前缀 Data TableName("t_user") public class User {private Long id;private Stri…

起薪4万的AI产品经理,必须掌握的技术模型与3大知识体系

这是求职产品经理系列的第170篇文章 一、AI行业的招聘趋势以及人才紧缺度 根据脉脉《2023年人才报告》显示&#xff1a;人工智能成为2022最缺人行业&#xff0c;⼈⼯智能⾏业的⼈才紧缺指数&#xff08;⼈才需求量/⼈才投递量&#xff09;为0.83&#xff0c;也就是说这个领域人…

react props传参

props是父子传参的常用方法。 一、主要功能 1.传参 定义&#xff1a;父级组件向子级组件传递参数。 2.验证数据类型格式 定义&#xff1a;可以指定父组件传递过来数据为指定类型。 3.设置默认值 定义&#xff1a;在参数未使用时&#xff0c;直接默认为指定值。 二、实例代…

了解DDM/DOM在光收发器中的重要性

在光网络领域&#xff0c;DDM/DOM是不可或缺的技术&#xff0c;确保了光收发器的最佳性能和可靠性。了解 DDM/DOM 的重要性对于该领域的专业人员至关重要&#xff0c;因为这些技术提供了对光通信系统运行状况和功能的实时洞察。让我们深入研究 DDM/DOM 的复杂性&#xff0c;探索…

Deckset for Mac激活版:MD文档转幻灯片软件

Deckset for Mac是一款专为Mac用户打造的Markdown文档转幻灯片软件。它凭借简洁直观的界面和强大的功能&#xff0c;成为许多用户的心头好。 Deckset for Mac激活版下载 Deckset支持Markdown语法&#xff0c;让用户在编辑文档时无需分心于复杂的格式设置&#xff0c;只需专注于…

前端请求没问题,后端正常运行,但查不出数据

写代码时写得快了些&#xff0c;Orders.的订单状态写错了CONFIRMED 改成COMPLETED

python-pytorch官方示例Generating Names with a Character-Level RNN的部分理解0.5.03

pytorch官方示例Generating Names with a Character-Level RNN的部分理解 模型结构功能关键技术模型输入模型输出预测实现 模型结构 功能 输入一个类别名和一个英文字符&#xff0c;就可以自动生成这个类别&#xff0c;且以英文字符开始的姓名 关键技术 将字符进行one-hot编…

翻译《The Old New Thing》 - BOOL vs. VARIANT_BOOL vs. BOOLEAN vs. bool

BOOL vs. VARIANT_BOOL vs. BOOLEAN vs. bool - The Old New Thing (microsoft.com) Raymond Chen 2004年12月22日 BOOL、VARIANT_BOOL、BOOLEAN 和 bool 的比较 简要 文章讨论了在编程中表示布尔值的几种不同方式&#xff0c;以及它们的起源和应用场景。 正文 为何会有如此…