4 装饰者模式
装饰者模式(Decorator):动态地将职责附加到对象上,若要扩展功能,装饰者提供了比继承更有弹性的替代方案。
UML如下:
按照《大话》的解释:Component定义了一个对象接口(超类型),可以给这些对象动态地添加职责。ConcreteComponent是一个具体的对象,接下来的实例代码主要给这个对象添加职责。Decorator,装饰抽象类,继承了Component,从外类来扩展Component类的功能。但对于Component来说,无需知道Decorator的存在,ConcreteComponent是具体的装饰对象,起到给Component添加职责的功能。
具体代码如下:
1 public abstract class Component 2 { 3 public abstract void Operate(); 4 } 5 public abstract class Decorator : Component 6 { 7 Component c; 8 public Decorator(Component cc) 9 { 10 c = cc; 11 } 12 13 public override void Operate() 14 { 15 c.Operate(); 16 } 17 18 } 19 public class ConcreteComponent : Component 20 { 21 public override void Operate() 22 { 23 Console.Write("ConcreteComponent"); 24 } 25 } 26 public class ConcreteDecoratorA : Decorator 27 { 28 public ConcreteDecoratorA(Component c) : base(c) { } 29 public override void Operate() 30 { 31 base.Operate(); 32 Console.Write("+ConcreteDecoratorA"); 33 } 34 } 35 36 public class ConcreteDecoratorB : Decorator 37 { 38 public ConcreteDecoratorB(Component c) : base(c) { } 39 40 public override void Operate() 41 { 42 base.Operate(); 43 Console.Write("+ConcreteDecoratorB"); 44 } 45 }
调用代码:
1 Component c = new ConcreteComponent(); 2 c = new ConcreteDecoratorB(c); 3 c = new ConcreteDecoratorA(c); 4 c.Operate();
具体装饰对象A和B的调用次序和个数可以任意组合,在这儿便可以体会到装饰者模式的极大灵活性。
但这种设计方案在有些场合会导致装饰者类过多从来带来维护上的困难,实际应用中要注意这一点了。
目前,始终无法很好地理解这种方法,先记录这么点,日后有深化了再来补充吧。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具