在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