C#编程模式之装饰模式

server/2024/9/25 4:43:46/

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

相关文章

分布式Hadoop环境的安装与搭建

Hadoop学习笔记 初步了解Hadoop 一、 认识Hadoop 1&#xff09; Hadoop是一个处理海量数据的框架 2&#xff09; 可以分布式的处理海量数据 3&#xff09; 为海量数据提供高效的处理 二、 什么是大数据 1&#xff09; 单位&#xff1a;bit、byte、kb、mb、gb、tb、pb、e…

用Stream流方式合并两个list集合(部分对象属性重合)

一、合并出共有部分 package com.xu.demo.test;import java.util.Arrays; import java.util.List; import java.util.stream.Collectors;public class ListMergeTest1 {public static void main(String[] args) {List<User> list1 Arrays.asList(new User(1, "Alic…

LabVIEW和MES系统的智能化车间数据对接

LabVIEW和MES系统的智能化车间数据对接 随着工业4.0时代的到来&#xff0c;智能制造成为推动制造业高质量发展的重要手段。其中&#xff0c;数字化车间作为智能制造的重要组成部分&#xff0c;其设计与实现至关重要。在数字化车间环境下&#xff0c;如何利用LabVIEW软件与MES系…

Hadoop3:集群搭建及常用命令与shell脚本整理(入门篇,从零开始搭建)

一、集群环境说明 1、用VMware安装3台Centos7.9虚拟机 2、虚拟机配置&#xff1a;2C&#xff0c;2G内存&#xff0c;50G存储 3、集群架构 从表格中&#xff0c;可以看出&#xff0c;Hadoop集群&#xff0c;主要有2部分&#xff0c;一个是HDFS服务&#xff0c;一个是YARN服务 …

Linux配置双网卡,1NAT 2桥接,ARM板上网

1、简介 版本型号&#xff1a;ubuntu18.04 ARM板型号&#xff1a;6ull本文主要记录配置第一次ubuntu与arm板连接的nfs配置和ARM板上网的配置&#xff0c;按照配置网络、配置nfs系统、给板子连网 顺序进行。该配置的前提是创建ubuntu系统的网络配置选择的是NAT模式&…

Elasticsearch内存占用分析

目录 1. 堆内存 (Heap Memory) 2. 索引缓存 (Index Cache) 3. 段缓存 (Segment Cache) 4. 文件系统缓存 (File System Cache) 5. 分片和副本 (Shards and Replicas) 6. 分析器和令牌器 (Analyzers and Tokenizers) 7. 过度配置 (Over-Allocation) 8. 垃圾回收 (Garbage…

基于Spring Boot的口腔管理平台设计与实现

基于Spring Boot的口腔管理平台设计与实现 开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/idea 系统部分展示 管理员登录界面图&#xff0c;管理员登录进入口腔管理平…

python安装cx_Oracle 遇到的问题

重要&#xff1a; 搞了一天&#xff0c;最后发现是python的版本和cx_Oracle版本对不上。 一开始安装的python版本是3.12&#xff0c;而cx_Oracle的最新版本是8.3.0&#xff0c; 对应的python版本为3.10&#xff0c;因此将python版本降低为3.10&#xff0c; 执行 pip install cx…