深入设计模式之二:装饰者模式

本文深入解析装饰者模式,强调其在运行时扩展功能的优势,并与面向接口编程相结合,阐述如何提高程序弹性与减少引入bug的机会。通过类图展示装饰者模式的应用,解释如何利用组合和委托实现动态扩展,以及类对扩展开放、对修改关闭的设计原则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在讲策略模式的时候,文章着重讲了“面向接口编程”,面向接口编程的好处是可以把客户的行为通过接口在外部的封装类中实现,从而提高了程序弹性。

今天说下“装饰者模式”,首先看下官方定义:

动态的将职责附加在对象上,若想扩展功能,装饰者提供了比继承更有弹性的替代方案

装饰者模式非常好的实现了一个设计原则:类应该对扩展开放,对修改关闭他告诉我们:运行时扩展,远比时期的继承威力大。

下面是装饰者模式的类图

我们看到图里也使用继承,但重点在于装饰者(Decorator)和被装饰者(ConcreteComponent)有相同的超类型,利用继承达到类型匹配,而不是利用继承获得行为。行为来自装饰者和基础组件,或者与其他装饰者之间的组合关系。

继承可以实现复用,如果不通过继承,如何实现复用呢?组合(composition)和委托(delegation)可以在运行时具有继承行为的效果。继承是在编译时静态决定的,而利用组合的做法扩展对象的行为,可以在运行时动态的进行扩展

利用动态扩展可以把多个新职责加在对象上,而不用修改原来的代码,不修改现有代码,那么引进bug或意外副作用的机会将大幅减少。

大师说:代码应该像晚霞中的莲花一样关闭(免于改变),如同晨曦的莲花一样开放(能够扩展)。感受模式的好处,编写出高质量的代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值