设计模式之装饰器模式
装饰器模式
-
装饰器模式结构图
-
示例代码:
// 抽象公共类 public abstract class Component { public abstract void work(); } // 具体被装饰对象 public class People extends Component{ @Override public void work() { System.out.println("开始起床去上班......"); } } // 抽象装饰器类 public abstract class WearDecorator extends Component{ protected Component component; public WearDecorator(Component component) { this.component = component; } } // 具体装饰类1 public class ShoeDecorator extends WearDecorator{ public ShoeDecorator(Component component) { super(component); } @Override public void work() { component.work(); System.out.println("穿上运动鞋......"); } } // 具体装饰类2 public class ShirtDecorator extends WearDecorator{ public ShirtDecorator(Component component) { super(component); } @Override public void work() { component.work(); System.out.println("穿上T恤......"); } } // 具体装饰类3 public class PantsDecorator extends WearDecorator{ public PantsDecorator(Component component) { super(component); } @Override public void work() { component.work(); System.out.println("穿上运动裤......"); } } // 具体装饰类4 public class HatDecorator extends WearDecorator{ public HatDecorator(Component component) { super(component); } @Override public void work() { component.work(); System.out.println("戴上网球帽...."); } } // 测试 public class DecoratorTest { public static void main(String[] args) { People people = new People(); ShirtDecorator shirt = new ShirtDecorator(people); PantsDecorator pants = new PantsDecorator(shirt); ShoeDecorator shoes = new ShoeDecorator(pants); HatDecorator hat = new HatDecorator(shoes); hat.work(); } }
-
总结:
优点:可以动态的给一个对象扩展功能,即插即用,可以通过不同的装饰器排列组合,实现不同效果,并且遵循开闭原则;
缺点:会出现更多代码和类,增加了程序的复杂性.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
· Manus的开源复刻OpenManus初探