装饰者模式
装饰者模式
装饰者模式(Decorator Pattern)是一种结构型设计模式,主要用于动态地给对象添加额外的功能,而不改变其结构。这个模式通过创建一个装饰类来包装原始对象,从而扩展其功能。
主要角色
- 组件(Component):定义一个接口或抽象类,声明可以被装饰的对象所共有的接口。
- 具体组件(ConcreteComponent):实现了组件接口的具体类,代表需要装饰的对象。
- 装饰者(Decorator):持有一个组件对象的引用,并实现组件接口。装饰者可以在调用原始组件的方法之前或之后,添加额外的功能。
- 具体装饰者(ConcreteDecorator):继承自装饰者,具体实现要添加的功能。
结构示例
假设你有一个简单的 Coffee
类,想要动态地给它添加不同的配料,比如牛奶或糖。你可以通过装饰者模式来实现。
-
组件接口
Beverage
-
具体组件
Coffee
-
装饰者基类
BeverageDecorator
-
具体装饰者
MilkDecorator
-
具体装饰者
SugarDecorator
-
测试类
TestDecoratorPattern
解释
- 组件接口
Beverage
定义了所有饮料的基本接口,包括获取描述和计算费用的方法。 - 具体组件
Coffee
实现了Beverage
接口,提供了基础的咖啡描述和费用。 - 装饰者基类
BeverageDecorator
维护了一个Beverage
对象的引用,并实现了Beverage
接口,但getDescription
方法是抽象的,具体装饰者需要实现它。 - 具体装饰者
MilkDecorator
和SugarDecorator
实现了BeverageDecorator
,分别添加了牛奶和糖的描述和费用。 - 测试类
TestDecoratorPattern
演示了如何使用装饰者模式来动态地添加功能,并打印了结果。
通过装饰者模式,可以灵活地组合和扩展对象的功能,而不需要修改对象的原始代码。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)