七.装饰模式
装饰模式:
为已有功能动态的添加更多的功能。
如果没有抽象实体,装饰类直接继承实体。
如果只有一个装饰实体,可以将装饰实体与抽象装饰类合并。???
装饰类:
//装饰类
abstract class Decorator : Component
{
protected Component component;
public void SetComponent(Component component)
{
this.component = component;
}
public override void Operation()
{
if (component != null)
{
component.Operation();
}
}
}
装饰实体:
//实体
class ConcreteDecoratorA : Decorator
{
private string addedState;
public override void Operation()
{
//运行基类的Operation方法,再执行本类功能
//相当于对原类Component进行了装饰
base.Operation();
addedState = "New State";
Console.WriteLine("具体装饰对象A的操作");
}
}
class ConcreteDecoratorB : Decorator
{
public override void Operation()
{
base.Operation();
AddedBehavior();
Console.WriteLine("具体装饰对象B的操作");
}
public void AddedBehavior()
{
//本类独有的方法
Console.WriteLine("B独有的方法");
}
}
装饰类所装饰的实体:
//抽象类,Component(组成,部件元件)
abstract class Component
{
//(操作)
public abstract void Operation();
}
//实体
class ConcreteComponent : Component
{
public override void Operation()
{
Console.WriteLine("具体对象的操作");
}
}
使用:
ConcreteComponentc = new ConcreteComponent();
ConcreteDecoratorA d1 = new ConcreteDecoratorA();
ConcreteDecoratorB d2 = new ConcreteDecoratorB();
d1.Operation();
d2.Operation();
Console.WriteLine();
d1.SetComponent(d2);
d1.Operation();
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述