首页 > 其他分享 >DecoratorPattern-装饰器模式

DecoratorPattern-装饰器模式

时间:2023-08-18 19:04:07浏览次数:36  
标签:string 模式 public dataProcessor DecoratorPattern IDataProcessor data 装饰

在C#中,装饰器模式(Decorator Pattern)是一种结构型设计模式,它允许您在不改变现有对象的情况下动态地向其添加功能。装饰器模式通过将对象包装在装饰器对象中来实现,在运行时动态地添加新的行为或修改现有行为。

装饰器模式有以下几个关键角色:

Component(组件):定义了一个抽象接口,可以是抽象类或接口。它是被装饰的对象和装饰器对象的共同接口,定义了被装饰对象的核心功能。

ConcreteComponent(具体组件):实现了Component接口,是具体的被装饰对象。

Decorator(装饰器):继承或实现了Component接口,并持有一个Component对象的引用。它可以对被装饰对象的功能进行扩展,或者修改其行为。

ConcreteDecorator(具体装饰器):实现了Decorator接口,并添加了额外的功能。

namespace DecoratorPattern_装饰器模式
{
    internal class Program
    {
        // Component
        public interface IDataProcessor
        {
            void ProcessData(string data);
        }

        // ConcreteComponent
        public class DataProcessor : IDataProcessor
        {
            public void ProcessData(string data)
            {
                Console.WriteLine("原始数据:" + data);
            }
        }

        // Decorator
        public abstract class DataProcessorDecorator : IDataProcessor
        {
            protected IDataProcessor dataProcessor;

            public DataProcessorDecorator(IDataProcessor dataProcessor)
            {
                this.dataProcessor = dataProcessor;
            }

            public virtual void ProcessData(string data)
            {
                dataProcessor.ProcessData(data);
            }
        }

        // ConcreteDecorator
        public class EncryptDecorator : DataProcessorDecorator
        {
            public EncryptDecorator(IDataProcessor dataProcessor) : base(dataProcessor)
            {

            }

            public override void ProcessData(string data)
            {
                base.ProcessData(data);
                string encryptedData = Encrypt(data);
                Console.WriteLine("加密后的数据:" + encryptedData);
            }

            private string Encrypt(string data)
            {
                // 实现数据加密算法
                // 这里只是一个示例,实际加密算法可能会更加复杂
                return Convert.ToBase64String(Encoding.UTF8.GetBytes(data));
            }
        }
        static void Main(string[] args)
        {
            // 创建具体组件
            IDataProcessor dataProcessor = new DataProcessor();

            // 添加装饰器
            dataProcessor = new EncryptDecorator(dataProcessor);

            // 使用装饰后的对象
            dataProcessor.ProcessData("Hello, world!");
            Console.Read();
            //输出结果
            //原始数据:Hello, world!
            //加密后的数据:SGVsbG8sIHdvcmxkIQ ==
        }
    }
}

 在上述示例中,使用装饰器模式实现了一个加密功能。IDataProcessor作为组件定义了数据处理的基本接口,DataProcessor是具体的组件,EncryptDecorator是装饰器,扩展了数据处理的功能,并在需要时进行数据加密。客户端可以根据需要添加、组合装饰器对象,动态地对被装饰对象进行功能扩展。

装饰器模式在需要在运行时动态地为对象添加额外功能时非常有用。它提供了一种灵活的方式来扩展现有对象的功能,而无需修改其结构。此外,由于装饰器和被装饰对象共享相同的接口,因此可以透明地使用装饰后的对象,不影响原始代码的调用。

标签:string,模式,public,dataProcessor,DecoratorPattern,IDataProcessor,data,装饰
From: https://www.cnblogs.com/ZHIZRL/p/17641353.html

相关文章

  • 一文带你读懂设计模式之责任链模式
    1.前言emm,翻了一下之前刚入职时候的学习笔记,发现之前在熟悉业务代码的时候曾经专门学习并整理过过设计模式中的责任链模式,之前只是对其简单了解过常用的设计模式有哪些,并未结合实例和源码深入对其探究,利用熟悉代码契机进行系统学习并整理文档如下。2.什么是责任链模式?俗话说没......
  • 28、中继配置DHCP服务(relay模式)
    中继配置的意义:DHCP服务器与DHCP客户端不在同一网段内,避免每一个网段都布置DHCP服务,DHCP中继负责DHCP服务器与DHCP客户端之间的DHCP报文转发。1、拓扑如下2、交换机配置 SW2的配置如下Thedeviceisrunning!<Huawei>sysEntersystemview,returnuserviewwithCtrl......
  • 设计模式-代理模式
    代理模式(文章目录)什么是代理模式  代理模式(ProxyDesignPattern)的原理和代码实现都不难掌握。它在不改变原始类(或叫被代理类)代码的情况下,通过引入代理类来给原始类附加功能。为什么要用代理模式职责清晰,功能增强部分代码可以放到代理类中,减少与业务代码的耦合;更符合......
  • CompositePattern-组合模式
    在C#中,组合模式(CompositePattern)是一种结构型设计模式,它允许您将对象组合成树状的结构,以表示部分-整体的层次关系,使得客户端可以以一致的方式处理单个对象和对象组合。在组合模式中,有以下几个角色:Component(组件):是组合中所有对象的通用接口,可以是抽象类或接口。它声明了一些操作......
  • 请解释自动装配模式的区别?
    在Spring框架中,自动装配是一种通过Spring容器在应用程序的不同组件之间自动建立依赖关系的机制。它简化了组件之间的配置工作,减少了手动设置依赖的繁琐步骤。Spring提供了几种自动装配模式,其中最常用的有三种:no、byType和byName。no(默认):这是默认的自动装配模式。它表示不进行自动......
  • X710网卡LACP模式下ifdown网卡后交换机侧依然处于UP状态,导致网络通信异常
    以下配置属于临时配置,重启后失效,具体建议在bios或者固件中解决。主要包含两个配置:1、使用ifdown命令关闭网卡无法使linkdown,交换机侧依然认为端口UP进行流量转发,无法正常通信2、在某些环境中,LACP可能无法正常工作,这些环境要求将包含LCAP信息的LLDP帧转发到网络堆栈。#查看网卡......
  • Springboot中实现观察者模式
    在SpringBoot中实现观察者模式可以通过以下步骤进行:1.定义观察者接口(Observer):创建一个接口,定义观察者对象需要实现的方法,例如update()方法。publicinterfaceObserver{voidupdate();}2.实现具体的观察者(具体实现Observer接口的类):创建一个或多个具体的观察者类,实......
  • 医疗信息云LIS系统源码 .Net Core版SaaS模式
    SaaS模式.NetCore版云LIS系统源码医疗信息LIS系统是专为医院检验科设计的一套实验室信息管理系统,能将实验仪器与计算机组成网络,使病人样品登录、实验数据存取、报告审核、打印分发,实验数据统计分析等繁杂的操作过程实现了智能化、自动化和规范化管理。有助于提高实验室的整体管理......
  • 设计模式(二)工厂方法
    一、前言工厂模式常见的词:简单工厂、工厂方法、抽象工厂。简单工厂不属于23种经典设计模式,但通常将它作为学习其他工厂模式的基础。二、简单工厂1、定义定义一个工厂类,它可以根据参数的不同返回不同类型的实例,被创建的实例通常都具有共同的父类。由于简单的工厂模式中用于创建......
  • 一文带你读懂设计模式之责任链模式 | 京东云技术团队
    1.前言emm,翻了一下之前刚入职时候的学习笔记,发现之前在熟悉业务代码的时候曾经专门学习并整理过过设计模式中的责任链模式,之前只是对其简单了解过常用的设计模式有哪些,并未结合实例和源码深入对其探究,利用熟悉代码契机进行系统学习并整理文档如下。2.什么是责任链模式?俗话说没有规......